结构指针设定值

时间:2017-10-15 18:14:27

标签: c pointers struct

我正在尝试为struct创建一个构造函数,它接受一个指向struct的指针,mallocs内存,并设置字段。但是,当我打印出我认为已设置的内容时,我看到这些字段为空。我也在使用C99

void init_student(struct student* student, char* name, int id, float gpa) {
    student = (struct student*) malloc(sizeof(struct student));
    student->name = name;
    student->id = id;
    student->gpa = gpa;
}

1 个答案:

答案 0 :(得分:3)

您正在为您的函数参数<section> <h1>Title</h1> <p>...</p> </section> 分配。函数参数按值传递,因此调用者永远不会看到您分配的内存。为此,您需要修改调用者的变量,并且可以通过将指针传递给 it 来实现:

student

并将其命名为

void init_student(struct student** student, char* name, int id, float gpa) {
    *student = malloc(sizeof(struct student));
    ...
}

或者,将指针设为返回值:

struct student* student;
init_student(&student, ...);

然后

struct student* new_student(char* name, int id, float gpa) {
  struct student* student = malloc(sizeof(struct student));
  ...
  return student;
}

顺便说一句,您不需要转换struct student* student = new_student(...); 的结果,因此通常不鼓励这样做,因为它可能会隐藏有关缺少malloc指令的警告。此外,如果您的内存不足,#include可能会失败。在这种情况下,您不应该尝试取消引用返回的空指针。