我不知道现在所有的 C 参数传递规则是什么,所以这个答案可能有点过时了。根据构建应用程序和这些应用程序调用的库的常见做法,C 函数的返回将包含状态,因此函数的调用者可以根据状态代码做出决定。
如果您希望函数修改其输入参数,您可以通过引用传递这些参数&my_val
,其中int my_val;
. 并且您的函数必须像这样取消引用 my_val*my_val
才能获得它的值。
此外,出于性能原因,地址(通过引用)可能更可取,这样您的应用程序就不会费心将参数的值复制到局部变量中。该序言代码由编译器生成。单个参数、char、int 等非常简单。
我已经习惯了 C++,以至于在 C++ 中通过引用传递不需要取消引用。编译器的代码会为您处理这些。
但是,请考虑将指针传递给结构。
struct my_struct
{
int iType;
char szName[100];
} struct1;
struct my_struct *pStruct1 = &struct1;
如果结构包含在初始化时填充一次然后在整个程序中引用的查找数据,则通过 value 传递指向结构的指针pStruct1
。如果您正在编写一个函数来填充该结构或更改已经存在的数据,则按值传递指向该结构的指针。您仍然可以更改结构指针指向的内容。
另一方面,如果您正在编写一个函数来为指针分配内存,则传递指针的地址(指向指针的指针)&pStruct1
,这样您的指针就会指向正确的内存。