C-指针和函数-按值调用和按引用调用
在本教程中,我们将学习将指针与C编程语言中的函数一起使用。
我们在先前的教程中介绍了函数。
随时检查一下。
创建一个变量
我们将从创建一个整数变量num开始。
#include <stdio.h> int main(void) { //integer variable int num = 10; return 0; }
我们可以在内存中表示如下。
将价值传递给函数
我们可以通过两种方式将值传递给函数。
- 按值致电-即传递副本
- 通过引用调用-这涉及指针
按价值致电
在此方法中,我们将变量的副本而不是实际变量传递给被调用的函数。
因此,对所调用函数中的变量副本所做的任何更改都不会反映回原始变量。
在下面的示例中,我们使用了num整数变量。
我们正在调用add10()函数,并将num变量作为参数传递给该函数。
#include <stdio.h> //function declaration void add10(int); int main(void) { //integer variable int num = 10; //print value of num printf("Value of num before function call: %d\n", num); //pass by value add10(num); //print value of num printf("Value of num after function call: %d\n", num); return 0; } //function definition void add10(int n) { n = n + 10; printf("Inside add10(): Value %d\n", n); }
Value of num before function call: 10 Inside add10(): Value 20 Value of num after function call: 10
我们可以看到函数调用后num
的值没有改变。
这是因为当我们将值num变量作为参数传递给函数add10()时,然后在add10()函数内部使用副本n而不是实际变量num。
。
在下图中,我们可以看到将num变量保存在内存位置1000中,并将函数add10()的参数变量n存储在内存位置2000中。
将num传递给函数时,num的值即10将保存在位置2000中。
然后我们在add10()
函数内的n
上加10。
因此,位置2000处的新值变为20。
但是存储位置num变量的位置1000处的值仍为10。
因此,得出的结果是num保持不变。
如果我们想使用变量" num",那么我们必须借助指针并通过引用传递" num"。
以指针作为参数的函数
以下是将指针作为参数的函数的声明语法。
returnType functionName(dataType *ptrVar);
其中,returnType是函数的返回类型。
因此,如果函数不返回任何值,则将其设置为" void"。
functionName是函数的名称。
dataType表示指针变量ptrVar的数据类型。
通过参考电话
在这种情况下,我们将变量num的地址作为参数传递给add10()函数。
#include <stdio.h> //function declaration void add10(int *); int main(void) { //integer variable int num = 10; //print value of num printf("Value of num before function call: %d\n", num); //pass by reference add10(&num); //print value of num printf("Value of num after function call: %d\n", num); return 0; } //function definition void add10(int *n) { *n = *n + 10; printf("Inside add10(): Value %d\n", *n); }
Value of num before function call: 10 Inside add10(): Value 20 Value of num after function call: 20
我们可以看到在上面的输出中num的值被更改了。
在下图中,我们可以看到num
变量存储在内存位置1000中。
当我们调用add10()
函数时,我们会将num
的地址作为参数传递给该函数。
因此,分配给存储位置2000的函数参数变量" n"存储了" num"变量的地址,即1000。
因此,n指向num。
在add10()函数内部,我们使用以下代码添加10。
*n = *n + 10;
其中," * n"表示指针变量" n"中存储的地址值。
因此,指针变量n中存储的地址为1000,它指向变量num。
因此,「* n」会给我们10,即「num」的值。
由于我们正在从add10()函数内部更新位置1000的值,因此,当我们从函数调用返回时,我们将获取num变量的更新值。