Что означает struct_type [1]?
Я нашел код, который получает размер структуры следующим образом:
sizeof(struct struct_type[1]);
Я тестировал, и он возвращает размер struct_type
.
и
sizeof(struct struct_type[2]);
возвращает дважды размер структуры.
Изменить:
struct_type
- это структура, а не массив:
struct struct_type {
int a;
int b;
};
Что означает struct_type[1]
?
Ответы
Ответ 1
Помните синтаксис sizeof
:
sizeof ( typename );
Здесь typename struct struct_type[N]
или в более читаемой форме struct struct_type [N]
, которая представляет собой массив из N объектов типа struct struct_type. Как вы знаете, размер массива - это размер одного элемента, умноженный на общее количество элементов.
Ответ 2
Также как:
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
просто возвращает размер представленных массивов.
Ответ 3
Для объявления
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])
.