C-指针和函数-按值调用和按引用调用

时间:2020-02-23 14:31:58  来源:igfitidea点击:

在本教程中,我们将学习将指针与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变量的更新值。