关于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;
}
第一个函数 程序编译的时候警告,不能返回局部变量的地址,而第二种方式确不发出警告,函数的局部变量不是放在栈中吗?当函数调用结束的时候不是栈空间会北回收吗,那么局部变量的地址被外部变量所引用的时候,那么这快栈中的数据会变无效吗?之类就想不通啊
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;
}
第一个函数 程序编译的时候警告,不能返回局部变量的地址,而第二种方式确不发出警告,函数的局部变量不是放在栈中吗?当函数调用结束的时候不是栈空间会北回收吗,那么局部变量的地址被外部变量所引用的时候,那么这快栈中的数据会变无效吗?之类就想不通啊
...全文
相关推荐
C语言static关键字三种用法解析:局部变量生命周期延长、全局变量作用域限制及函数内部链接应用
内容概要:本文详细讲解了C语言中static关键字的三种主要用法:修饰局部变量、全局变量和函数。通过丰富的代码示例,阐述了static如何改变变量的存储位置、生命周期和作用域,以及如何限制函数的链接范围。文章还分析了静态局部变量在状态保持、计数器等场景的应用,静态全局变量和静态函数在模块化设计中的作用,并提供了单例模式、函数调用统计等实战案例,最后总结了使用static的注意事项与最佳实践。; 适合人群:具备C语言基础,有一定编程经验的初中级开发者,尤其是对作用域、生命周期和模块化编程感兴趣的程序员; 使用场景及目标:①理解static在变量生命周期和作用域控制中的核心机制;②掌握如何利用static实现模块封装、隐藏实现细节、避免命名冲突;③在实际项目中合理应用static优化代码结构与安全性; 阅读建议:学习时应结合文中示例动手实践,重点关注static在不同上下文中的行为差异,注意其在多文件工程和多线程环境下的影响,避免滥用导致内存或并发问题。
【C语言趣味教程】(6) 作用域:局部变量 | 全局变量 | 局部变量优先原则 | 利用大括号限制作用域 | 变量的生命周期
本章我们将介绍作用域和生命周期。讲解全局变量和局部变量的概念,重点讲解 "局部变量优先原则"。
C语言 全局变量和局部变量详解及实例
主要介绍了C语言 全局变量和局部变量详解及实例的相关资料,需要的朋友可以参考下
c代码-局部变量测试1
c代码-局部变量测试1
c代码-局部变量测试2
c代码-局部变量测试2


