如果在C语言中调用有结构体作为参数的函数,需要返回对其的修改,那么会遇到以下的场景:
情况一:
函数声明为
void(List *list,int n);
变量声明为
List list;
这个时候,调用函数的格式为
void(&list,n)
此时函数需要的是指针,我们传进去的应该是变量的地址,也就是&list
情况二:
函数声明为
void(List *list,int n);
变量声明为
List *list;
//此时应该在外部就给list分配一块内存空间
list = (List*)malloc(sizeof(List));
这个时候,调用函数的格式为
void(List list,int n);
情况三:
函数声明为:
void(List list,int n);
变量声明为:
List list;
此时函数调用的格式为
void(list,n);
//注意此时函数不返回对list的修改
情况四:
函数声明为:
void(List &list,int n );
变量声明为:
List list;
//注意,只能声明为不是指针形式的,其他形式对于此时的函数来说都会报错
此时调用的格式为
void(list,n);
此时函数仍然会返回对list的修改,需要注意的是,这种情况下函数的声明中List &list
的写法是对其取地址,这只能在C++中才能写在函数的声明中,C语言无法实现此操作,只是很多时候写C代码是在C++环境下,且文件后缀名是.cpp,故易混淆