c - 函数返回数组指针,执行printf两次得到的结果不一样。
本文介绍了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屋!
查看全文