C语言中 sizeof 与 struct

C语言中,struct是由不同类型的变量组成的。


struct在内存存储时,是按照内存对齐来存放的,即开始和结束的地址都是n的倍数,这个n是由struct最长的变量类型决定的。

也就是struct的大小一定是n的整数倍。

例如一个struct含有double型,那么 n 就是8字节。

还有一个要满足的条件,每一种变量的存放的首地址也要是其自身大小的倍数。

下面简单起见,空字节用0表示。

{char, char, char, short, int }在内存中存放位置如下(每一行代表32bit)

             char, char, char,  0

                 short,    0,  0

              int,

  sizeof后的大小为 12Byte,char只要是地址就可以放,因为他的大小是1B,而short占了2B,所以存放的时候要空出1B才能保证粗放地址是2的倍数,int同理。

{char, char, char, short, int,char }在内存中存放位置如下(每一行代表32bit)

             char, char, char,  0

                 short,    0,  0

              int,

             char

sizeof后的大小为 16Byte,最后一个char的存放虽然只占用了1个字节,但是计算stuct大小是,必须是4B(int的大小)的倍数,


注:某些编译器会优化struct中变量的顺序,以保证占用空间最小,对于第二个例子,会把最后一个char放到第四个空字节上,使struct的大小变成12B。


### 回答1: 在C语言sizeof函数可以用来计算一个数据类型或变量所占用的字节数。它可以作用于各种数据类型,包括基本数据类型(如int,float等),结构体,数组等等。使用sizeof函数可以方便地确定某个数据类型或变量所占用的内存大小,以便在程序合理地分配内存空间。同时,sizeof函数也可以用于计算数组的长度,例如sizeof(array)/sizeof(array[0])可以得到数组元素的个数。 ### 回答2: 在C语言sizeof是一个特殊的操作符,用于返回数据类型或变量所占用的内存空间大小(以字节为单位)。 sizeof函数的主要作用有以下几点: 1. 确定数据类型的字节大小:sizeof可以返回数据类型的字节大小,例如sizeof(int)返回4,表示int类型占用4个字节的内存空间。这对于我们在计算内存分配、数组长度等方面非常有用。 2. 获取变量的字节大小:sizeof可以返回变量所占用的内存空间大小。例如,如果有一个整型变量x,可以使用sizeof(x)来获取x所占用的字节大小。 3. 计算数组长度:由于数组在内存是按连续方式存储的,sizeof可以用于计算数组的长度,即数组元素的个数乘以每个元素的大小。例如,如果有一个整型数组a,可以使用sizeof(a)/sizeof(a[0])来计算数组的长度。 4. 判断指针类型:sizeof可以用于确定指针的类型。例如,sizeof(int*)返回指向int类型的指针的大小。 需要注意的是,sizeof是一个在编译时运算的操作符,不会实际改变程序的运行。另外,在一些情况下,sizeof可能会返回一个无法真正代表实际大小的结果,例如当应用于动态分配的内存或指向函数的指针时。 总而言之,sizeofC语言的作用是用于返回数据类型或变量所占用的内存空间大小,方便我们在内存分配、数组长度计算等方面做出正确的决策。 ### 回答3: 在C语言sizeof函数是一个运算符,用于计算数据类型或变量所占用的内存大小,以字节为单位。 sizeof函数的作用主要有以下几点: 1. 获取数据类型的大小:可以用sizeof函数来确定数据类型所占用的内存大小。例如,sizeof(int)可以得到int类型的大小,通常为4字节。 2. 获取变量的大小:可以用sizeof函数来获取一个变量所占用的内存大小。例如,sizeof(num)可以得到变量num的大小,取决于其类型。 3. 计算数组元素个数:可以利用sizeof函数计算数组元素的个数。例如,对于int数组arr,可以使用sizeof(arr)/sizeof(int)来得到数组的长度。 4. 计算结构体的大小:可以使用sizeof函数来获取结构体所占用的内存大小。例如,sizeof(struct Student)可以得到结构体Student所占用的内存大小。 需要注意的是,sizeof函数返回的是一个常数值,表示所占用的字节数。另外,sizeof函数在编译时计算,不会对数据类型或变量进行实际的评估或操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值