这段代码的问题是,明明是在函数中定义的结构体,那应该在栈上分配了内存,当函数结束之后
这个结构体变量应该就没有了呀,传出的地址也就是无效值,可是为什么结果显示这个结构体还
存在呢,求大神详细解释下,百思不得其解
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct
{
int data;
}node;
node * fun1()
{
node h;
h.data = 1;
return &h;
}
void main()
{
node *p;
p = fun1();
printf("%d\n",p->data);
system("pause");
}
本地试了一下,
GCC编译器,有个warning:address of local variable 'h' returned [enabled by default]
我本地的编译器不知道怎么查看堆栈,下面的网址中,有详细的解释:
http://blog.csdn.net/aa838260772/article/details/39938175
你是理解错了吗?typedef struct{ int data;} node;这个意思是定义了数据类型而已,node的数据类型就是这个结构体,属于全局变量
函数返回了,但是这个函数所使用的栈以及栈中的数据并没有被修改,我想你应该在这个函数返回后再调用一个函数(这个函数至少要有一个局部变量或者参数),然后在试试显示p->data的值。