c - 函数返回数组指针,执行printf两次得到的结果不一样。

查看:106
本文介绍了c - 函数返回数组指针,执行printf两次得到的结果不一样。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

这是代码:

int* Get_A() {
    int a[2] = { 1, 2 };
    return a;
}

int main() {
    int *a = Get_A();
    printf("%d %d\n", *a, *(a + 1));
    printf("%d %d\n", *a, *(a + 1));
    printf("%d %d\n", *a, *(a + 1));
}

在visual studio运行得到的结果:

1 2
-2 15727148
-2 15727148

两次的结果不一样,这是为什么呢?

解决方案

在Get_A中返回的a指针根本不应该这么返回。在Get_A中的a在栈上分配,退出函数后,栈就弹出了,之所以你第一次调用能够看到结果,是因为栈虽然弹出了,但是其中的数据并没有清空,而且恰好,在进入printf函数前,a和a+1这两个形参被复制了一份给printf用。然而第一次printf时,栈就被破坏了,但是你的外部的a还是指向原来的栈的某个地址,所有后续发生什么就无法预测了。

这篇关于c - 函数返回数组指针,执行printf两次得到的结果不一样。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆