-
我们知道,当调用一个函数时,我们传入的参数可以是各种类型的,比如 int、double、char......
-
那么当我们传入的参数是指针类型的呢?
-
我们先以一个 “让输入的参数加1” 的函数为例来讲解。
实例:参数为整型
#include<stdio.h>
int add1(int num)
{
num = num + 1;
return num;
}
int main()
{
int a = 1;
a = add1(a);
printf("%d",a);
return 0;
}
输出结果:2
-
观察上面这段代码,初始时,a等于1。
-
当我们使用函数 add1()来对 a 进行加 1 时,我们需要用 a 自身来接收函数的返回值。
-
也就是 a = add1(a);
-
因为我们传入函数的参数其实并不是真正的 a,传入的参数只是把 a 的值复制了一份,传入的只是跟 a 相等的一个数值。
-
因此,函数对于传入参数的改变,只是改变了形参 num 的值,并没有改变 a 本身。
-
如果我们想要让传入的参数是 a 本身的话,就需要传入 a 的地址,而不是 a 的值,也就是指针作为函数的参数。
实例:参数为指针
#include<stdio.h>
void add1(int* num) // 加上 * 变为指针类型
{
*num = *num + 1; // 对指针指向的值进行直接操作
return; // 结束函数
}
int main()
{
int a=1;
add1(&a); // 不再需要对自身进行赋值
printf("%d",a);
return 0;
}
输出结果:2
-
这段代码中可以看到,调用函数时传入的参数前面多了个 &,也就是取地址符号,这就表示我们传入的参数不再是 a 的值,而是 a 的地址。
-
同样的,在函数的定义上,因为我们传入的参数是 a 的地址,所以函数内对于形参 num 数据的改变会直接反映到 a 上面,也就是对 a 本身进行更改。
-
此时函数不需要返回值,函数类型可以设为 void。
-
同时也不再需要返回值,所以可以只写一个 return; 来表示函数结束。