2016-09-30 217 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只针对第一名学生,就编译器而言。

没有内置的方式来获得一个数组的大小,给出一个指向它的开始。你需要自己跟踪大小。