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循环时,它只打印&#34; hi& #34;一次应该是8次。我做错了什么?
输出:
8
8
1
hi
答案 0 :(得分:3)
我做错了什么?
students
是一个指针,因此sizeof(students)
为您提供指针的大小。它没有给出students
指向的数组的大小。
令人沮丧的是,sizeof(*students)
也不起作用 - 它为您提供一个学生的大小,而不是整个数组的大小。那是因为students
只指向第一个学生,就编译器而言。
没有内置的方法来获取数组的大小,给定指向它的开头的指针。你需要自己跟踪大小。