首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

变量内存分配有关问题

2012-04-14 
变量内存分配问题请教大家,在函数内部定义的变量和函数外部定义的变量有什么区别?如1和2,是否都分配内存,

变量内存分配问题
请教大家,在函数内部定义的变量和函数外部定义的变量有什么区别?如1和   2,是否都分配内存,能否被外部调通?等等
1.   char   a;
      void   fun(void)
      {
       
      }

2.   void   fun(void)
      {
          char   a;
   
      }


[解决办法]
内存肯定都是要分配的,只是位置不同,第一个是全局存储区,第二个是在栈上
另外变量的可见性也不一样,第一个是全局可见的,第二个只在函数内部可见
生命周期也不同,第一个在程序执行过程中全程有效,第二个在函数fun结束后就终结

参考
程序在的内存中的分配(常量,局部变量,全局变量,程序代码) - ...
[解决办法]
补充: 如果此时运行到函数
void fun(void) 

char a; 


那么遇到的a认为是局部变量的a
[解决办法]
变量作用域。如果有同名的菊部变量,就不用全局变量。

其实有时疏忽,会出这样的错
if (...)
{
int i;
...(各种代码)
}

cout << i; //这里就悲剧了
[解决办法]
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、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

热点排行