1. 为什么c语言结构体的内存大小是24
指针大小是固定的,与指向的地址内容无关,与机器位数有关。
大小等于机器位长,64位指针大小是8,32位指针大小是4。
如果编译器设置了对齐,那么:
64位就是 8*3=24。
32位就是4*3=12。
你再运行看看。
2. 请教一个c语言程序 为什么会是24 而不是22
结构体字节对齐是与你的编译器默认情况有关的,#pragma pack (n)宏可以改变字节对齐值,具体可以网络搜索这个宏。
简单解释一下:
long(4)+char*(4)+short(2)+char(1)这时是11个字节,而下一个是short数组,short一个变量占两个字节,所以short型起始地址必须是2的倍数,12是2的位数,所以从12开始放最后的那个short数组,共10字节,加起来一共22字节。但字节对齐要求整个结构体的总大小必须是结构体内占空间对大的那个类型变量的倍数,比如此结构中占空间最大类型是long(4),所以结构体大小须是4的倍数,这个就凑成了24字节,假设里面有个double(8)类型,那就必须是8的倍数。
而后面你说的p和p+1的问题,那是16进制数,16进制的0x18变成十进制就是24.
3. c语言中,024和24是值相等的整型常量吗
024是八进制数,等于十进制的20,以0开头的数字是八进制数,后面由数字0~7组成,以0x开头的是十六进制数,由数字0~9和字母A~F组成,字母可以是大字,也可以是小写,正常的十进制数和我们平常使用的一样,因此024与24是不相等的
4. c语言这个程序输出结果为什么是24
这是因为编译时存在字节对齐的原因,字节对齐主要是为了提高内存数据读取速度。如果你想要让结果等于实际大小,你可以设置字节对齐大小如
#pragma pack(1)
取消设置
#pragma pack()
字节对齐的规则如下:
结构体的大小等于其最大成员的整数倍;
结构体成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍。
比如double型成员的首地址相对于结构体首地址的偏移量应该是8的倍数;
满足前两条规则后,编译器会在结构体成员之后进行字节填充。
5. C语言中,024和24是值相等的整型常量吗
不相等哦。
以0 开头的是 8进制表示的常数;
以0x开头的是16进制表示的常数;
没有前缀的是10进制表示的常数。
所以024和24是不同的
024 也就是 8进制的24,也就是2* 8+4=20
24 也就是10进制的24,也就是2*10+4=24
6. c语言程序设计 第一项输入为何是24
你好,我没搞懂你的意思,请详细描述一下可以吗?谢谢
你好,我看懂你的意思了,你把"^"的意思搞错了,这个并不是次方符号,在c语言里这是一个位运算符,10的2次方的正确写法是:pow(10,2)。谢谢,希望能帮到你。