C语言中如何将指针作为函数参数传递并返回?
- 内容介绍
- 文章标签
- 相关推荐
本文共计916个文字,预计阅读时间需要4分钟。
C++语言在语法本质上是一种值调用(call by value)的语言,因为函数的形参都是局部变量。这些变量通过传入的实参进行初始化。C++的优点之一是,只需表达式的类型匹配,就可以直接将表达式作为实参。另一方面,。
C 语言本质上是传值调用(call by value)的语言,因为函数的形参都是局部变量,它们通过传入的实参进行初始化。C 语言的优点是,只要表达式的类型适当,就可以当作实参。另一方面,缺点是在启用函数时,如需要复制大数据对象,则运行成本很高。而且,函数没有办法修改原始变量(调用者的变量),只能修改原始变量的复制版本。
然而,如果函数的实参是变量的地址,那么函数就可以通过指针,直接获取该原始变量,并修改原始变量的值。所以,C 语言也提供了传址调用(call by reference)函数。
一个典型的例子就是标准函数 scanf(),它从标准输入流中读入数据,然后将结果放在它的变量中,该变量由调用者提供的指针参数所引用:
int var;
scanf( "%d", &var );
该函数调用会将字符串当作十进制数读入,然后转换为整数,再将它的值存储在局部变量 var 的内存地址上。
下面的函数 initNode()初始化一个结构变量。调用者将该结构的地址当作参数来传递。
本文共计916个文字,预计阅读时间需要4分钟。
C++语言在语法本质上是一种值调用(call by value)的语言,因为函数的形参都是局部变量。这些变量通过传入的实参进行初始化。C++的优点之一是,只需表达式的类型匹配,就可以直接将表达式作为实参。另一方面,。
C 语言本质上是传值调用(call by value)的语言,因为函数的形参都是局部变量,它们通过传入的实参进行初始化。C 语言的优点是,只要表达式的类型适当,就可以当作实参。另一方面,缺点是在启用函数时,如需要复制大数据对象,则运行成本很高。而且,函数没有办法修改原始变量(调用者的变量),只能修改原始变量的复制版本。
然而,如果函数的实参是变量的地址,那么函数就可以通过指针,直接获取该原始变量,并修改原始变量的值。所以,C 语言也提供了传址调用(call by reference)函数。
一个典型的例子就是标准函数 scanf(),它从标准输入流中读入数据,然后将结果放在它的变量中,该变量由调用者提供的指针参数所引用:
int var;
scanf( "%d", &var );
该函数调用会将字符串当作十进制数读入,然后转换为整数,再将它的值存储在局部变量 var 的内存地址上。
下面的函数 initNode()初始化一个结构变量。调用者将该结构的地址当作参数来传递。

