局部变量初始化问题

ZW2949940 2016-02-23 04:45:11
各位大神,局部变量与局部数组变量的初始化有什么不同吗?

比如定义一个函数如下:
test()
{
char a;
char b[10];
}
编译后test的入口地址假设为0x5000;

初始化char a;
test()
{
char a=0;
char b[10];
}
编译后test的入口地址仍然是0x5000;

但是这样改写后:
test()
{
char a;
char b[10]={0};
}
编译后test的入口地址变为了0x500A;
为什么会有这样的区别,数据和char变量的初始化不一样吗?
...全文
531 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
danteng2000 2016-02-28
  • 打赏
  • 举报
回复
字符是1个字节 字符可以用立即数赋值,我们写代码输入的字符编译的时候会变成对应的ASCII码数值,这个值是代码段的立即数。 字符串或者叫字符数组 实际是一个地址值占4字节,指向一段内存空间。 有初值的字符串实际上是两码事,左边是字符数组,占4个字节。 右边是字符常量 ,早就在编译的时候在数据段分配了空间并且把值存好了。 初始化或者其他方式赋值都只是一次复制的过程,和其他的变量会用立即数赋值不一样。
zara 2016-02-24
  • 打赏
  • 举报
回复
你说的 test() 的入口,是说后面如果有其它语句的话那些语句的开始地址吧?如果是这样的话,第二个不会是 0x5000 的,应该多出来给 a 赋值的那个指令;第三个多得更多,是因为给数组赋值比给单个元素变量赋值要复杂些。其实,看下最后的 exe 反汇编代码就明白了。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧