C语言全局变量和局部变量会冲突吗?为什么?C语言中,看你怎么安放全局变量和局部变量了。如果你把全局变量和局部变量放在一个代码文件内,那么就是冲突的。这么说不明显,我写个C程序代码你就知道了,如下图所示:在这段C程序中,我在主函数main之外定义了一个全局变量para,并且给了一个初始值1
C语言全局变量和局部变量会冲突吗?为什么?
C语言中,看你怎么安放全局变量和局部变量了。如果你把全局变量和局部变量放在一个代码文件内,那么就是冲突的。这么说不明显,我写个C程序代码你就知道了,如下图所示:在这段C程序中,我在主函数main之外定义了一个全局变量para,澳门新葡京并且给了一个初始值1。在C程序主函数main里面,我又定义了一个变量para,跟主函数之外的那个(读:gè)para是同名。
这里(繁体:裏),C程序主函数外面的那个变量生命周期在【练:zài】整个[繁:個]代码中有效,而主函数的这个变量只在主函数内有效。
这也就是说,在C程序主函数里操作para变量,实际上操作的是主函数中的变量,外面的para变量值还是1。在这段C程序中,main函数中的para变量把外面的变量para给遮住了。
所以,同学们在学习C语言时,一定要注[繁体:註]意这个全局变量被局部同[繁:衕]名变量遮住的问题,同时也要了解变量的作用域{yù}和生命周期。
变量要占内存,指针呢?系统如何给变量分配内存?
定义一个变量,计算机系统是需要为其分配内存的,变量名就是一个名字而已,代表的是具体的一个对象,内存地址就是对象所存在的空间的地址,而内存在计算机中最小以位(bit)为单位,一个字节等于8位,对象大小都以字节为单位计算。char类型的变量(对象)占1个字节的空间(内存),int类型的变量(对象)占用4个字节的空间(内存)。内存分配规则
程序内存分配一般按照以下规则:1、代码区: 存储机器码序列/全局常量(liàng)/代码/字符串常量。
2、全局区: 全局变量和静态变量的存储是放在一块的,初始开云体育化的全《拼音:quán》局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 程序结束后由系统释放。未初始化数据段[.bss]: 未初始化的全局变量/未初始化的(局部/全局)静态变量(static修饰的变量)。
3、堆(从低地址往高低至增长): 所使用的局部世界杯变量还是在栈上,内容则在堆上.手动释放或者程序结束(pinyin:shù)时由操作系统释放回收。由程序员分配[new/malloc/realloc/calloc]。windows下, 申请的堆空间一般小于2GB。
4、栈(从高地址往低地址增长): 局部变量/局部常量(const)[局部只读变量]/函数调用时返回地址/调[繁体:調]用者的环境信息(例如某些机器(qì)寄存器)。
通过一段[练:duàn]代码加注释的方式来大致说明一下变量在各情况皇冠体育下的存储区域:见图
指针变量占用内存
指针变量也需要系统为其分配内存,只不过内存存储的是其所指向对象的内存的地址。一个任何类型的指针变量所占的字节大小都为4个字节。内存是由字节组成的《拼音:de》,每个字节都有一个编号。指针变量(pinyin:liàng)主要是存放相同数据类型的变量的首地址。这里的这个地址其实就是内存的某个字节的编号。而这个编号的确定是与地址总线有关
如果地址总线是32位,则它的寻址范围是【shì】0~2^32(0~皇冠体育4G)。那么为一个字节的编址就会由32个0或者1组成。例如第一个字节的编址是32个0,最后一个的编址是32个1。一个字节有8位,32位则需要4个字节
new实例化时内存会发生什么
然后我们来讲一下在对一个类用new实例一个对象时会发生什么。还是用上面用到的代码,前面有说过Test t_;t_对象是存在栈区的。new在对象实例化的时候会在堆开辟一个空间以用来存储类的成员变量,而成员函数并不存在于对象的内存空间。实例化完后后,若未对对象成员变量赋值,相应内存的未存入数据,若对成员变量赋值,则会从代码区将常量复制一份到该内存;另外我们通过sizeof(t)和sizeof(t_)会发现其大小等于int和string的大小相加;这说明对象中并不含成员函数的数据;本文链接:http://10.21taiyang.com/Shooter-GamesGames/20605573.html
变量《拼音:liàng》名内存地址转载请注明出处来源