当前位置:Business-Operations

变量名内存地(读:dì)址

2025-02-25 18:10:04Business-Operations

C语言全局变量和局部变量会冲突吗?为什么?C语言中,看你怎么安放全局变量和局部变量了。如果你把全局变量和局部变量放在一个代码文件内,那么就是冲突的。这么说不明显,我写个C程序代码你就知道了,如下图所示:在这段C程序中,我在主函数main之外定义了一个全局变量para,并且给了一个初始值1

娱乐城

C语言全局变量和局部变量会冲突吗?为什么?

C语言中,看你怎么安放全局变量和局部变量了。如果你把全局变量和局部变量放在一个代码文件内,那么就是冲突的。这么说不明显,我写个C程序代码你就知道了,如下图所示:

在这段C程序中,我在主函数main之外定义了一个全局变量para,并且给了一个初始shǐ 值1。在C程序主函数[繁体:數]main里面,我又定义了一个变量para,跟主函数之外的那个para是同名。

澳门永利

这里,C程序主函数外面的那个变量{liàng}生命周期在整个代码中有效,而主【pinyin:zhǔ】函数的这个变量只在主函数内有效。

开云体育

这也就是说,在C程序《拼音:xù》主函数里操作para变量,实际上操作的是主函数中的变量,外面的para变量值澳门伦敦人还是1。在这段C程序中,main函数中的para变量把外面的变量para给遮住了。

所以,同学们在学习C语言时,一定要注意这个全局变量被局部同名变量遮住的问题,同时也要了解变量的澳门银河作(读:zuò)用域和生命周期。

变量要占内存,指针呢?系统如何给变量分配内存?

定义一个变量,计算机系统是需要为其分配内存的,变量名就是一个名字而已,代表的是具体的一个对象,内存地址就是对象所存在的空间的地址,而内存在计算机中最小以位(bit)为单位,一个字节等于8位,对象大小都以字节为单位计算。char类型的变量(对象)占1个字节的空间(内存),int类型的变量(对象)占用4个字节的空间(内存)。

内存分配规则

程序内存分配一般按照以下规则:

澳门金沙1、代码区: 存储[繁:儲]机器码序列/全局常量/代码/字符串常量。

2、全局《繁体:侷》区: 全局【pinyin:jú】变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 程序结束后由系统释放。未初始化数据段[.bss]: 未初始化的{de}全局变量/未初始化的(局部/全局)静态变量(static修饰的变量)。

3、堆(从低地址往高低至增长): 所使[练:shǐ]用的局部变量还是在栈上,内容则在堆上.手动释放或者程序结束时由操作系统释放回《繁:迴》收。由程序员分配[new/malloc/realloc/calloc]。windows下, 申请的堆【读:duī】空间一般小于2GB。

4、栈(从高地址往低地址增长): 局部变量/局部常量(const)[局部只读变量]/函数调用时返回地址/调用者的环境信息(例如某些机器寄存器)。

通过一段代码加注释[繁体:釋]的方式来大致说明一下变量(pinyin:liàng)在各情qíng 况下的存储区域:见图

澳门新葡京

指针变量占用内存

指针变量也需要系统为其分配内存,只不过内存存储的是其所指向对象的内存的地址。一个任何类型的指针变量所占的字节大小都为4个字节。

内存是由字节组成的,每个字节都有一个编号。指针变量主要是存放相同数据类型的变量的首地址。这里的这个地址其实就是澳门威尼斯人内存的某个(繁:個)字节的编号

幸运飞艇

而这个编[繁体:編]号的确定是与地址总线有澳门金沙关。如果地址总线是32位,则它的寻址范围是0~2^32(0~4G)。那么为一个字节的编址就会由32个0或者1组成

例如第一个字节的编址是32个0,最后一个的编址是32个1。一【pinyin:yī】个字节有8位《练:wèi》,32位则需xū 要4个字节。

new实例化时内存会发生什么

然后我们来讲一下在对一个类用new实例一个对象时会发生什么。还是用上面用到的代码,前面有说过Test t_;t_对象是存在栈区的。new在对象实例化的时候会在堆开辟一个空间以用来存储类的成员变量,而成员函数并不存在于对象的内存空间。实例化完后后,若未对对象成员变量赋值,相应内存的未存入数据,若对成员变量赋值,则会从代码区将常量复制一份到该内存;另外我们通过sizeof(t)和sizeof(t_)会发现其大小等于int和string的大小相加;这说明对象中并不含成员函数的数据;

本文链接:http://21taiyang.com/Business-Operations/20605573.html
变量名内存地(读:dì)址转载请注明出处来源