当前位置:Open-SourceComputers

变【biàn】量名内存地址

2025-02-25 18:16:12Open-SourceComputers

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

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

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

乐鱼体育

在这段C程序中,我在主函《练:hán》数main之外定义了一个《繁体:個》全局变量para,并且给了一个初始值1。在C程序主函数main里面,我又定义了一个变量para,跟主函数【练:shù】之外的那个para是同名。

这里,C程序主函数(繁体:數)外面的那个变量生命周期在整个代码中有效,而主函数的这个变量只在主函数内【练:nèi】有效。

这也就是说,在C程序主函数里操亚博体育作para变量,实际上操作的是主函数中的变量,外面的para变量值还是1。在这段C程序中(zhōng),main函数中的para变量把外面的变量para给遮住了。

澳门新葡京

所以,同学们在学习C语言时,一{拼音:yī}定要注(繁体:註)意这个全局变量被局[繁体:侷]部同名变量遮住的问题,同时也要了解变量的作用域和生命周期。

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

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

内存分配规则

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

1、代码区: 存储机器码序{澳门银河拼音:xù}列/全局常量/代码/字符串常量。

世界杯下注

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

3、堆(从低地址往高低至增长): 所使用的局部变量还是在栈上,内容则在澳门银河堆上.手动释放或者程序结束时由操作系统{繁体:統}释放回收。由程序员分配[new/malloc/realloc/calloc]。windows下, 申请的堆空间一般小于2GB。

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

皇冠体育

通过一段代码加注释的(读:de)方式来大致说明一下澳门伦敦人变量在各情况下的存储区域:见图

指针变量占用内存

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

澳门威尼斯人

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

而这个编号的确定是与地址总线有关。如果地址总线是32位《练:wèi》,则它的寻址范围是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://21taiyang.com/Open-SourceComputers/20605573.html
变【biàn】量名内存地址转载请注明出处来源