因为你的局部变量是存储在栈中的,函数结束返回的时候,栈顶会下移,在x86的表现是ebp和esp被回复成调用前的值,而对调用函数之前在栈中的内存内容并不做修改,这时你从函数中返回的指针指向的内存没有任何变化,所以你直接访问的时候还会得到那个值(这里很可能是prinft使用栈是没有增长到a[1]指向的地址),如果你在函数返回后立即调用另一个函数,那么该指针地址指向的地方可能被改变,这是该位置的值就未定了。
例如:
#include
int * tain()
{
int x[2]={1,2};
//a=x;
return x;
}
int * tain1()
{
int x[2]={1,3};
//a=x;
return x;
}
main()
{
int *a;
a=tain();
tain1();
printf("%d",a[1]);
}
这是输入的应该不会是2了,应该会是3
函数返回数组指针例程
最新推荐文章于 2021-12-27 18:18:01 发布