将指针传递给嵌套函数

时间:2014-03-22 20:20:23

标签: c function pointers struct parameter-passing

我在通过嵌套函数将指针传递给指针(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 **’

感谢您的帮助,请原谅,如果这是不恰当的使用编辑能力。

2 个答案:

答案 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);