[学习资料] 指针在全局变量与局部变量之间的差异

[复制链接]
24981|93
loutin 发表于 2024-6-11 19:59 | 显示全部楼层
全局变量和局部变量的内存分配方式不同。全局变量在程序的数据段中分配内存,而局部变量在函数调用栈上分配内存。
uiint 发表于 2024-6-12 09:36 | 显示全部楼层
全局变量的生命周期从定义开始到程序结束。因此,指向全局变量的指针在整个程序执行期间保持有效。
wengh2016 发表于 2024-6-12 12:57 | 显示全部楼层
指向全局变量的指针在程序执行期间始终有效,而指向局部变量的指针仅在定义局部变量的函数执行期间有效。局部变量的生命周期结束后,指向它的指针将指向无效内存,访问这些指针可能导致未定义行为。
ingramward 发表于 2024-6-12 16:05 | 显示全部楼层
虽然一个指针可以指向一个局部变量,但需要注意的是这个局部变量的生命周期。一旦包含这个局部变量的代码块执行完毕,该局部变量所占用的内存就会被释放,而指向它的指针就会变成一个“悬空指针”(dangling pointer),即指向一个不再有效的内存地址。
uytyu 发表于 2024-6-12 19:11 | 显示全部楼层
全局变量的指针可以在整个程序范围内使用,因为全局变量在整个程序的生命周期内都存在。这意味着你可以在任何函数中创建一个指向全局变量的指针,并在程序的任何地方使用它。
局部变量的指针仅在其所在的作用域(通常是定义它的函数或代码块)内有效。局部变量在函数调用结束或相关代码块执行完毕后会被销毁,因此指向它的指针在该作用域之外使用是未定义行为,可能导致错误或崩溃。
pentruman 发表于 2024-6-12 22:20 | 显示全部楼层
全局变量如果没有显式初始化,默认值为0(对于基本类型的变量)。
局部变量如果没有初始化,则其内容是未定义的,可能是任意值。
mollylawrence 发表于 2024-6-13 19:34 | 显示全部楼层
如果需要在函数间共享数据,可以考虑使用全局变量或动态分配内存。
geraldbetty 发表于 2024-6-13 22:44 | 显示全部楼层
即使函数返回,静态局部变量的内存也不会被释放,从而可以安全地在函数外部通过指针访问。
bestwell 发表于 2024-6-14 08:57 | 显示全部楼层
在使用指针时,应确保指针指向的内存是有效的,并且注意指针的生命周期和作用域。
LinkMe 发表于 2024-6-14 15:24 | 显示全部楼层
您可以通过声明局部变量为静态的方式来延长它的生命周期,给它一个类似于全局变量的静态存储周期。
软核硬核 发表于 2024-6-16 11:45 | 显示全部楼层
不管怎样,如果程序有效,别搞砸了,好吗
LLGTR 发表于 2024-6-19 22:04 | 显示全部楼层
变量必须小心,不要乱动。
digit0 发表于 2024-6-21 21:24 | 显示全部楼层
结果是一个错误,一定是语法问题
理想阳 发表于 2024-7-5 20:03 | 显示全部楼层
这不仅适用于指向其他类型变量的指针
V853 发表于 2024-7-8 11:39 | 显示全部楼层
使用指针操作全局和局部变量时,要注意内存访问的有效性,避免出现野指针或越界访问。
 楼主| 21mengnan 发表于 2024-7-19 11:49 | 显示全部楼层
V853 发表于 2024-7-8 11:39
使用指针操作全局和局部变量时,要注意内存访问的有效性,避免出现野指针或越界访问。
...

言之有理,确实可能是这个问题。
pulj2626 发表于 2024-8-5 03:15 | 显示全部楼层
Pretext 发表于 2024-8-5 18:53 | 显示全部楼层
c语言中最难理解的东西之一是指针,
zj1 发表于 2024-8-10 12:43 | 显示全部楼层
AloneKaven 发表于 2024-8-15 23:14 来自手机 | 显示全部楼层
都可以先定义不赋值吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部