2 zw2949940 ZW2949940 于 2016.02.23 16:43 提问

局部变量和局部变量数组的初始化,分别在哪里完成

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

改写后
test()
{
char a=0;
char b[10];
}
编译后test的入口地址也为0x5000;

但是这样改写后:
test()
{
char a;
char b[10]={0};
}
编译后test的入口地址变为了0x500A;

为什么会有这样的区别,数据和char变量的初始化不一样吗?

1个回答

caozhy
caozhy   Ds   Rxr 2016.02.24 07:03

入口地址和局部变量放在不同的地方,一个是放在代码区里,一个是放在数据区的堆栈里。两者没有关系。

ZW2949940
ZW2949940 你没明白我的意思啊 初始化不同数据,为什么会造成入口地址的不一样。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
成员变量,局部变量与数组
转自:http://blog.csdn.net/du_minchao/article/details/48881637成员变量和局部变量的区别       成员变量:          1、成员变量定义在类中,在整个类中都可以被访问。          2、成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。          3、成员变量有默认初始化值。      局部...
java中成员变量和局部变量的初始化
java中成员变量和局部变量的初始化 成员变量的初始化 在java中,成员变量存在于类之内,方法和代码块之外。 class A{ 修饰符  数据类型 成员变量名; 方法(){} }这类变量在创建时如果不给初始化值,创建之后java会自动赋默认值: 基本数据类型 默认值 byte 0 short 0 int 0 long 0L char \u0000(空
局部变量和全局变量的初始化
写代码的时候遇到了这个问题,选两段抄过来做个笔记。定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的。在C语言里,全局变量如果不初始化的话,默认为0,也就是说在全局空间里:int x =0; 跟 int x; 的效果看起来是一样...
【c基础】全局变量-局部变量 静态变量static-自动变量auto 外部变量extern-内部变量static 常量const-宏定义#difine
标题已经给出了分类。不同分类下的定义互不干扰,尤其注意静态和全局,计算机等级考试和初级程序猿面试常见问题。 (1)全局变量局部变量        这个组合是规定变量的作用域 有局部变量的地方,全局变量被屏蔽。局部变量的定义函数之外,全局变量生效。 (2)静态变量static自动变量auto        这个组合是规定变量的生命周期 默认auto,auto关键字可
局部变量全局变量和动态分配的数据分别在内存中存放的位置
局部变量分配的内存在栈里:栈大小与编译器有关。默认情况下,visual studio 2010 的栈大小为1M。 全局变量存放在静态存储区:对于全局变量来说,与编译器有关,默认情况下, VS2010可容纳的全局变量数组大小是2G。由于程序本身的应用,所以只能使用小于2G大小。 动态分配的数据存在内存的堆里面:在VS2010的默认情况下,32位程序可以申请的堆大小最大是2G,
RAM中局部变量在栈中分配
无OS时,RAM的使用可以分为数据、栈和堆区域;有OS时,将RAM分成若干个段,每个任务分配一个段,用于各自的数据、栈和堆区域。        局部变量(Local Variable)是指作用域和生命周期都局限在所在函数或过程范围内的变量,它是相对于全局变量(Global variable)而言的。        编译器在为局部变量分配空间时通常有两种做法:使用寄存器和使用栈。寄存
全局变量和局部变量在内存中的区别
答:有区别。全局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。 该题目考查的知识点是变量的存储类型及性质。C语言经过编译之后将内存分为以下几个区域: (1)栈(stack):由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址。操作方式类似数据结
ARM局部变量初始化
1、程序片段如下: extern int main( void ) { uint32_t const_a = 0x12345678; uint32_t const_b = 0x87654321; uint32_t const_c = 0x04; while(1) { fun_a(const_a, const_b, const_c); fun_b(const_a, con
全局变量,静态局部变量,局部变量空间的堆分配和栈分配
这道题主要考察的知识点是 :全局变量,静态局部变量,局部变量空间的堆分配和栈分配其中全局变量和静态局部变量时从 静态存储区中划分的空间, 二者的区别在于作用域的不同,全局变量作用域大于静态局部变量(只用于声明它的函数中), 而之所以是先释放 D 在释放 C的原因是, 程序中首先调用的是 C的构造函数,然后调用的是 D 的构造函数,析构函数的调用与构造函数的调用顺序刚好相反。局部变量A 是通过 n
关于java中成员变量有默认初始化而局部变量没有
在java中如果没有给成员变量赋值java会自动赋0,而对于局部变量却不会这是为什么呢?下面就讨论下java如何给成员变量赋值的。 1普通成员变量:对于普通成员变量而言,当你实例化的时候通过构造函数java会自动赋0。如下 public class test { int i; static int j; public static void main(String[] args)