'struct'之前的预期表达式

时间:2013-04-16 03:38:06

标签: c pointers struct

我在下面的函数allocate()的第一行收到错误“'struct'之前的预期表达式”。我无法弄清楚原因。

我应该说我的任务是使这个代码与提供的结构/函数头一起工作。

非常感谢任何帮助!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <time.h>

struct student{
    int id;
    int score;
};

struct student* allocate(){
     /*Allocate memory for ten students*/
     struct student *stud =  malloc(10 * sizeof struct *student);
     assert (stud !=0);

     return stud;
}

void generate(struct student *students){
     /*Generate random ID and scores for ten students, ID being between 1 and 10, scores between 0 and 100*/
     srand(time(NULL));

     // Generate random ID's
     int i;
     for(i=0; i<10; i++){
        students[i].id = rand()*10+1;
     }

     //Generate random scores
     for(i=0; i<10; i++){
        students[i].score = rand()*10+1;
     }
}

void output(struct student* students){
     //Output information about the ten students in the format:

     int i;
     for(i=0; i<10; i++){
        printf("ID-%d Score-%d\n", students[i].id, students[i].score);
        }
}

void summary(struct student* students){
     /*Compute and print the minimum, maximum and average scores of the ten students*/
     int min = 100;
     int max = 0;
     int avg = 0;
     int i;
     for(i=0; i<10; i++){
        if(students[i].score < min){
            min = students[i].score;
        }
        if(students[i].score > max){
            max = students[i].score;
        }
        avg = avg + students[i].score;
    }
    avg = avg/10;
    printf("Minimum score is %d, maximum score is %d, and average is %d.", min, max, avg);

}

void deallocate(struct student* stud){
     /*Deallocate memory from stud*/
     free (stud);
}

int main(){
   struct student *stud = NULL;

    /*call allocate*/
    stud = allocate();

    /*call generate*/
    generate(stud);

    /*call output*/
    output(stud);

    /*call summary*/
    summary(stud);

    /*call deallocate*/
    deallocate(stud);

    return 0;
}

2 个答案:

答案 0 :(得分:7)

您可能想写

sizeof(struct student)

而不是

sizeof struct *student

答案 1 :(得分:1)

您的问题出在sizeof struct *student。在typename上使用sizeof运算符时,需要将typename括起来。此外,正如Jonathan Leffler在对此答案的评论中所指出的,*struct *student中的位置是错误的,并且在此代码的上下文中使用struct student *是不正确的。也许你的意思是:sizeof (struct student)

或者,您可以在表达式上使用sizeof,并且不需要括号。这是首选,因为如果您选择更改stud的类型,那么在执行此操作时您将无需替换额外的类型名称:struct student *stud = malloc(10 * sizeof *stud);