h-b-z-d-j-s-m 发表于 2022-12-4 16:51:34

sizeof

#include<stdio.h>
int main()
{
        int test;
        printf("%d,%d,%d,%d\n",sizeof(test),sizeof(&test),sizeof(&test),sizeof(test));
        return 0;
}
请问为什么这个分别是400,4,4,4

zhangjinxuan 发表于 2022-12-4 17:29:00

sizeof(test)
简单,test长度乘类型的size,也就是 100 * sizeof(int) = 100 * 4 = 400

sizeof(&test)
&表示求地址,在32位系统中,一个地址的size就是4字节,64位是8字节,你的系统应该是32位,所以就是 4

sizeof(&test)
与上面同理,4

sizeof(test)
test是int类型,int占4字节,故答案为4

铭凡 发表于 2022-12-6 14:54:54

楼上的解释很到位,还把系统的位数说明了一下,非常棒.这里我补充一下

一个数组的地址,默认为第一个数的地址,所以&size和&size指的都是同一个地址

补充内容和为什么是400 4 4 4没啥关系,就是看到数组就想补上这句罢了

如月ya 发表于 2022-12-6 19:20:43

本帖最后由 如月ya 于 2022-12-6 19:22 编辑

test是一个数组,你给的元素值是100
可以理解为你在内存里画了100个连续的空房间出来,房间号码是0-99
你的数组是int类型,就是每个房间可以放一个int类型范围内的一个值
在你的计算机里一个int类型是4个字节,相当于你每个房间能放4个字节的东西(对应int类型值得范围)

sizeof以字节为单位输出数量,所以
你四个输出,他们的意思分别是
1,sizeof(test),是在问整个数组也就是100个房间加起来一共有多大,一个int型房间是4个字节,100个房间自然就是400个字节
2,&test ,&test 是在问整个数组的地址在哪儿,sizeof(&test)就是问这个地址占多少个字节。
3,&test是在问第一个房间的房间号是多少,sizeof(&test)就是问数组第一个房间的房间号在内存中占多少个字节;
虽然2和3看上去结果一样,但是他们本质的意义不同,问的是两个东西,只是说规范里,整个数组的地址就是第一个房间号的地址,所以他们的输出结果会相同。
你sizeof他们是在问他们的地址占多少位,就是在内存里计算机用多少位存储他们的地址,这个位数是根据你内存来的,不同的人可能结果会不一样。你的刚好是4个字节。
四字节它不一定会全部占满,计算机这样是为了4字节能表示你内存里所有的房间号。
//你可以试试printf("%p,%p,%p",test,&test,&test);
//你会发现三个输出的值完全相同
//单纯的数组名 test 他的值就是第一个元素的地址(第0号房间的房间号)
4,sizeof(test),这个就是在问第一个房间有多大(能装多少个字节的东西),前面提到了,是4个

zhangjinxuan 发表于 2022-12-7 11:26:39

楼主在吗,记得设置最佳~
页: [1]
查看完整版本: sizeof