第一个:
struct student
{
int number;
float score;
};
struct student *fun2()
{
student stu1;
stu1.number=5489;
stu1.score=45.5;
student *stuptr=&stu1;
return stuptr;
}
第二个:
char *GetMemory(void)
{
char p[20] = "hello world";
char *ptr=p;
return ptr;
}
这两个函数依次返回指向结构和执行数组的指针
我困惑的是第一个能够正常输出,而第二个返回数组的指针就是乱码,
我看了一下,说是第二个的原因是:
因为GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原来的内容已经被清除,新内容不可知。
那么问题就来了,我的理解是第一个也应该是指向“栈内存”的指针,结构体stu1也是在栈内存中开辟的空间啊,函数执行完也应该类似于上边的数组,stu1也应该被自动释放的呀?那它为什么还是输出正确的值呢?而数组是乱码?
请各位指教一下 谢谢了! |