2016-12-10 4 views
-1

я следующий код:Как определить размер структуры в C

#include<stdio.h> 
typedef struct _node_1 
{ 
    int number; 
    int scores; 
    int xyz; 
    double p; 
} Node_1; 

typedef struct _node_2 
{ 
    int number; 
    int scores; 
    int xyz; 
    struct _node_2 *p; 
} Node_2; 

typedef struct _node_3 
{ 
    int number; 
    int scores; 
    int xyz; 
    struct _node_2 p; 
} Node_3; 
int main() 
{ 
    printf("%d\n",sizeof(Node_1)); 
    printf("%d\n",sizeof(Node_2)); 
    printf("%d",sizeof(Node_3)); 
    return 0; 
} 

и выход:

24 
24 
40 

Мой вопрос, почему результат выводит эти 3 примера являются как это и как мы точно определяем размер структуры? BTW, моя операционная система - 64-разрядная. Спасибо!

+0

и обратите внимание, что размеры должны быть напечатаны с использованием ['% zu'] (http://stackoverflow.com/q/940087/995714) –

ответ

2

Для первого & второго, можно было бы ожидать 4 + 4 + 4 + 8 = 20 из-за размера внутренних данных, но вы забыли о выравнивание.

64-разрядные указатели & удваивается (64 бит) тоже необходимо выровнять по 8-байтовой границе. Компилятор вставляет для этого 4-байтовое дополнение.

 Смежные вопросы

  • Нет связанных вопросов^_^