关于C局部变量的生命周期。
写了两个函数:
struct TestNode* test_node1 (TestList *l) {
TestNode tn;
tn.n = 12;
printf("%p\n", &tn);
*l = &tn;
return &tn;
}
struct TestNode* test_node2 (TestList *l) {
TestNode *tn = (TestNode *) malloc (sizeof(struct TestNode));
tn -> n = 12;
printf("%p\n", &tn);
*l = tn;
return tn;
}
第一个函数 程序编译的时候警告,不能返回局部变量的地址,而第二种方式确不发出警告,函数的局部变量不是放在栈中吗?当函数调用结束的时候不是栈空间会北回收吗,那么局部变量的地址被外部变量所引用的时候,那么这快栈中的数据会变无效吗?之类就想不通啊