struct_type [1]是什么意思?

时间:2016-08-02 11:07:54

标签: c struct sizeof

我找到了一些像这样得到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]实际意味着什么?

3 个答案:

答案 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])计算。