首页 > 试题广场 >

请问在32位系统中,sizeof(list_t)的值为?

[单选题]
开发C代码时,经常见到如下类型的结构体定义:
typedef struct list_t{
struct list_t *next;
struct list_t *prev;
char data[0];
}list_t;
请问在32位系统中,sizeof(list_t)的值为?
  • 4byte
  • 8byte
  • 5byte
  • 9byte
推荐
答案是B
     这个题目不明白请参考我前面的解析:柔性数组不占内存,和内存对齐
http://www.nowcoder.com/questionTerminal/be5269b8c2d340c3add69510d0089747?toCommentId=75253
编辑于 2015-12-05 11:29:53 回复(1)
在用作定义时char[0]是空数组,是不占空间的。如果定义char[1],那么就是长度为1的数组,使用char[0]则表示这唯一的数据,注意差别啦
发表于 2016-02-24 03:19:30 回复(0)
选 B;
柔性数组:
把单一元素的数组放在一个struct的尾端,使得每个struct对象可以拥有可变大小的数组
开始题目中的char data[0] 或写成char data[],即为柔性数组;
data不占用struct的空间,只是作为一个符号地址存在。 因此sizeof的值是两个指针所占字节,即4+4 = 8字节。
发表于 2016-09-11 00:18:40 回复(2)
结构体 里的 指针占内存 空间,并且是占4字节空间
发表于 2015-11-11 22:10:53 回复(1)
感觉这个题目最坑的是chardata[0];
很容易就将认为这个占一个字节,然后觉得没有答案选,细心很重要
发表于 2015-11-09 16:55:48 回复(4)
如果不知道柔型数组,那么俺教你排除法解决这道题。
前两个*类型指针每个四个字节,共八个字节啦,假设你把最后的char data[0]算作一个字节
你这时候想字节对齐法则啊,如果后面真是有一个char占一个字节,那总共应该是12个字节,答案没有,所以选8字节B
发表于 2019-10-09 15:27:58 回复(1)
柔性数组: 把单一元素的数组放在一个struct的尾端,使得每个struct对象可以拥有可变大小的数组。 开始题目中的char data[0] 或写成char data[],即为柔性数组; data不占用struct的空间,只是作为一个符号地址存在。 因此sizeof的值是两个指针所占字节,即4+4 = 8字节。
发表于 2018-03-06 18:21:26 回复(0)
柔性数组不占用存储空间。
发表于 2016-05-20 14:41:27 回复(0)
陷阱就是data[0],错就错在这里

发表于 2015-12-04 15:53:10 回复(0)
明明是8字节,这里写成了b。
发表于 2016-08-31 19:59:18 回复(0)
两个指针,每个指针占4个字节,最后一个是柔性数组不占内存。
发表于 2016-08-20 11:12:44 回复(0)

发表于 2021-03-17 11:11:45 回复(0)
chardata[0];
空字节,用于structlist_t后的内存进行命名。如(struct list_t *)malloc(sizeof(struct MyData )+strlen(str)),可以用list_t->data  对str进行相关操作。
编辑于 2016-09-02 17:58:15 回复(0)
4+4+0=8
发表于 2023-09-17 11:31:12 回复(0)
chardata[0]; 空字节,用于structlist_t后的内存进行命名。如 style="color: rgb(51,51,51);">(struct list_t *)malloc(sizeof(struct MyData )+strlen(str)),可以用list_t->data 对str进行相关操作。
发表于 2022-10-17 14:43:51 回复(0)
柔性数组不占空间,用时需要动态分配内存
发表于 2022-03-12 11:34:01 回复(0)
计算机的显示的是16个字节
发表于 2020-06-11 15:04:34 回复(0)
内推链接:https://www.nowcoder.com/discuss/376314
发表于 2020-03-06 18:11:05 回复(0)
我又忘了内存对齐
发表于 2020-02-25 04:24:28 回复(1)

在vs2017测试的时候内存增加8

发表于 2019-04-24 11:18:04 回复(0)
两个指针占8个字节,最后的char data[0] 是一个柔性数组,不占内存,是用来进行扩展的
发表于 2018-07-07 09:45:29 回复(0)