Подтвердить что ты не робот

Что означает 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]?

4b9b3361

Ответ 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]).