我找到了一些像这样得到struct大小的代码:
sizeof(struct struct_type[1]);
我测试了它确实返回了struct_type
的大小。
和
sizeof(struct struct_type[2]);
返回结构大小的两倍。
修改:
struct_type
是结构,而不是数组:
struct struct_type {
int a;
int b;
};
struct_type[1]
实际意味着什么?
答案 0 :(得分:23)
请记住sizeof
语法:
sizeof ( typename );
这里typename是struct struct_type[N]
或更易读的形式struct struct_type [N]
,它是一个类型为struct struct_type的N个对象的数组。如您所知,数组大小是一个元素的大小乘以元素的总数。
答案 1 :(得分:13)
就像:
sizeof(int[1]); // will return the size of 1 int
和
sizeof(int[2]); // will return the size of 2 ints
所以:
sizeof(struct struct_type[1]); // return size of 1 `struct struct_type'
和
sizeof(struct struct_type[2]); // return size of 2 `struct struct_type'
此处struct struct_type[1]
和struct struct_type[2]
只代表arrays
类型struct struct_type
元素,而sizeof
只返回那些代表数组的大小。
答案 2 :(得分:7)
声明
int arr[10];
可以使用arr
作为操作数或int [10]
来计算数组的大小。由于sizeof
运算符根据操作数的类型生成大小,sizeof(arr)
和sizeof (int [10])
都将返回数组arr
的大小(最终arr
属于类型int [10]
)。
C11-§6.5.3.3/ 2:
sizeof运算符产生其操作数的大小(以字节为单位),可以是 表达式或类型的括号名称。 大小取决于操作数的类型。结果是整数。如果操作数的类型是可变长度数组类型,则计算操作数;否则,不评估操作数,结果是整数常量。
同样,对于struct struct_type
struct struct_type a[1];
尺寸可以sizeof (a)
或sizeof(struct struct_type[1])
计算。