2016-09-30 209 views
0
struct student{ 
    int id; 
    int score; 
}; 

struct student* allocate(){ 
    struct student* students = (struct student*)malloc(sizeof(struct student)*10); 
    return students; 
} 


void generate(struct student* students){ 
    int i=0; 
    printf("%lu\n", sizeof(students)); 
    printf("%lu\n", sizeof(struct student)); 
    int length = sizeof(students)/sizeof(struct student); 
    printf("%d\n", length); 
    for(i=0;i<length;i++){ 
      printf("hi\n"); 
    } 
} 

我有這樣的代碼應該創建的10層學生結構的陣列。當我到達generate函數並嘗試查看學生數組分配了多少內存時,它只能說8個字節,與單個學生結構本身相同,當我進入for循環時,它僅在打印時發出「hi」一次應該是8次。我做錯了什麼?C沒有正確地爲結構數組分配內存嗎?

輸出:

8 
8 
1 
hi 
+1

「......查看學生陣列分配了多少內存......」。是什麼讓你相信operator'sizeof'適合這個目的?你是怎麼想出使用'sizeof'的想法的? – AnT

+1

sizeof(students)給你一個指針的大小,而不是數組的大小。 –

+0

那麼獲得數組大小的最佳方法是什麼? – izzzi

回答

3

我做了什麼錯?

students是一個指針,所以sizeof(students)給你一個指針的大小。它不會給你students指向的數組大小。

勉強夠,sizeof(*students)也不起作用 - 它給你的大小一個學生,而不是整個陣列的大小。這是因爲students只針對第一名學生,就編譯器而言。

沒有內置的方式來獲得一個數組的大小,給出一個指向它的開始。你需要自己跟蹤大小。