C中的指针和循环

idi*_*ast 9 c pointers loops

请知道我对C和指针一般都很新... 这是一个类,所以我不是要求显式代码,只是帮助理解这些概念.

我正在尝试创建一个循环来将随机值分配给结构中的int.当我将值分配给指针或数组的当前迭代时,会出现问题.

struct student{
    int id;
    int score;
};

struct student* allocate(){
    /*Allocate memory for ten students*/
    int ROSTER_SIZE = 10;
    struct student *roster = malloc(ROSTER_SIZE * sizeof(struct student));

    /*return the pointer*/
    return roster;
}

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

    for (i = 0; i < 10; ++i) {
        students[i]->id = i + 1;
        students[i]->score = rand()%101;
}
Run Code Online (Sandbox Code Playgroud)

现在,根据我的理解,这很可能是不正确的,我应该可以使用students[i]为每次迭代分配值,但VS 2010告诉我"表达式必须有指针类型".它不是指针吗?它作为指针传递给函数,对吗?

Pau*_*l R 7

更改:

students[i]->id = i + 1;
students[i]->score = rand()%101;
Run Code Online (Sandbox Code Playgroud)

至:

students[i].id = i + 1;
students[i].score = rand()%101;
Run Code Online (Sandbox Code Playgroud)

原因:students是指向数组的指针struct student.students[i]是一个实际的struct student.注意,students[i]实际上相当于*(students + i).


hex*_*ist 5

学生是一个指针,但当你索引它然后你正在引用一个实际的结构实例,因此你需要使用.而不是->访问该结构中的一个字段

  • 换句话说,表达式`students`具有类型`struct student*`,而表达式`studends [i]`具有类型`struct student`. (4认同)