我在通过嵌套函数将指针传递给指针(struct)时遇到问题,以便为其分配或重新分配内存。我理解当传递给函数时,它是通过值传递的,因此只能在本地编辑,但在语法上不清楚如何传递它。以下重要代码段:
struct courseData{
char name[25];
int id;
};
void menuSwitch(int* courseNum, struct courseData** course);
void addCourse(int* courseNum, struct courseData** course);
int main(){
struct courseData* course = NULL;
int courseNum = 0;
menuSwitch(courseNum, &course); //Edited from original post.
return 0;
}
void menuSwitch(int* courseNum, struct courseData** course){
addCourse(&courseNum, course)
}
menuSwitch实际上是一个案例开关,在选择菜单项时会调用addCourse函数。
void addCourse(int* courseNum, struct courseData** course){
if(*courseNum == 0)
*course = (struct courseData*) malloc(sizeof(struct courseData));
else
*course = (struct courseData*) realloc(*course, (*courseNum + 1)*sizeof(struct courseData));
*courseNum = *courseNum + 1; //Increments course count by 1
------code continues------
}
纠正原始问题后,编译结果会导致以下错误/警告来自gcc
main.c: In function ‘main’:
main.c:27:3: warning: passing argument 2 of ‘menuSwitch’ from incompatible pointer type [enabled by default]
header.h:24:6: note: expected ‘struct courseData *’ but argument is of type ‘struct courseData **’
func.c:60:6: error: conflicting types for ‘menuSwitch’
header.h:24:6: note: previous declaration of ‘menuSwitch’ was here
func.c: In function ‘menuSwitch’:
func.c:64:3: warning: passing argument 2 of ‘addCourse’ from incompatible pointer type [enabled by default]
header.h:26:6: note: expected ‘struct courseData *’ but argument is of type ‘struct courseData **’
感谢您的帮助,请原谅,如果这是不恰当的使用编辑能力。
答案 0 :(得分:2)
void menuSwitch(int* courseNum, struct courseData** course)
更改
addCourse(&courseNum, course)
到
addCourse(courseNum, course);
答案 1 :(得分:1)
你做得很好,直到你到menuSwitch
。该函数接收courseNum
,它是指向int
的指针。然后它应该传递相同的指针addCourse
,就像它与course
一样。但是,您传递 courseNum
的地址。因此,您不是传递int *
,而是将指针的地址传递给int *
或int **
。对addCourse
的调用应该是这样的:
addCourse(courseNum, course);