社区
C语言
帖子详情
变量内存分配问题
lixianghua0428
2012-03-07 09:34:29
请教大家,在函数内部定义的变量和函数外部定义的变量有什么区别?如1和 2,是否都分配内存,能否被外部调通?等等
1. char a;
void fun(void)
{
}
2. void fun(void)
{
char a;
}
...全文
118
5
打赏
收藏
变量内存分配问题
请教大家,在函数内部定义的变量和函数外部定义的变量有什么区别?如1和 2,是否都分配内存,能否被外部调通?等等 1. char a; void fun(void) { } 2. void fun(void) { char a; }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
赵4老师
2012-03-07
打赏
举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
viktor
2012-03-07
打赏
举报
回复
变量作用域。如果有同名的菊部变量,就不用全局变量。
其实有时疏忽,会出这样的错
if (...)
{
int i;
...(各种代码)
}
cout << i; //这里就悲剧了
Jackchenyj
2012-03-07
打赏
举报
回复
补充: 如果此时运行到函数
void fun(void)
{
char a;
}
那么遇到的a认为是局部变量的a
justkk
2012-03-07
打赏
举报
回复
内存肯定都是要分配的,只是位置不同,第一个是全局存储区,第二个是在栈上
另外变量的可见性也不一样,第一个是全局可见的,第二个只在函数内部可见
生命周期也不同,第一个在程序执行过程中全程有效,第二个在函数fun结束后就终结
参考
程序在的内存中的分配(常量,局部变量,全局变量,程序代码) - ...
lixianghua0428
2012-03-07
打赏
举报
回复
明白了,感谢楼上各位大大!
C/C++ 指针的13份资料
C/C++ 指针的13份资料 内容丰富,让编程人员不再害怕指针
结构体
变量
内存分配
问题
由于系统 遵守两个原则 1.为结构体
变量
的成员
变量
分配内存的起始地址必须为成员
变量
内存长度的整数倍。 2.结构体
变量
内存的总大小必须为sizeof(结构体成员
变量
)(最大的)的整数倍。 struct Demo{ char a;//sizeof(char)=1 int b;//sizeof(int)=4 flloat c;//sizeof(float)=4 double d;//sizeof...
Keil编译器
变量
内存分配
问题
环境:软件:keil5 硬件:LPC2138芯片
问题
: 定义了一个
变量
。 当C中存在访问(读或者写)该
变量
代码,编译下载后,程序会跑飞。 过程: 假设一:怀疑cpu访问到了非法地址跑飞; 这段代码并不会被执行到,排除了cpu访问就会跑飞的假设。 排除
问题
: 因为无法仿真,只能去查找MAP文件。 最终的存储区域,都会在MAP文件中详细说明; 定义了该
变量
:bootParam_st 当没有写访问代码的时: MAP文件对应的信息,只有这一行。 当加上访问代码时: 访问代码: 或者: 再来查看MAP文件:
C++全局
变量
内存分配
和初始化顺序
C++全局
变量
内存分配
和初始化顺序 1.局部
变量
规则 局部
变量
是在栈空间上,
内存分配
的顺序和代码的顺序是一致的 2.全局
变量
规则 2.1 初始化的全局
变量
一般来说,对于初始化的全局
变量
,编译器遇到之后知道这是一个定义,会马上分配空间,例如: int ib = 10; int ia = 10; 这个分配的结果是:ia的地址在ib后面 2.2 未初始化的全局
变量
对于未初始化的全局
变量
,编译器遇到之...
c语言
内存分配
之局部
变量
内存分配
局部
变量
内存分配
情况: 局部
变量
保存在栈中(保存地址由高地址到低地址)。 先定义先分配内存。 由此可见局部
变量
分配空间的顺序和
变量
的声明顺序直接相关,同时按照内存地址由高到低的顺序进行空间分配. 先定义,先分配,地址由高到低 数组越界
问题
(看图3和图4) 由于首先声明的是数组a[4],于是在高位
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章