#include<stdio.h>
void change(int j) //j是形参,而 底下的i是实参
{
j=5;
}
int main()
{
int i=10;
printf("before change i=%d \n",i);
change(i); //C语言的“函数调用”是 “值传递”,“实参”赋值给“形参”
printf("after change i=%d \n",i);
return 0;
}
结果:
注意:
通过 change(i);
其实 已经将 实参传递给形参j,同时改变了j的值,将j的值变为10
然后运行 j=5;
只是把 change子函数中的j变成5,而主函数的i并未发生改变
#include<stdio.h>
void change(int *j) //等价 j = &i
{
*j=5; //可以通过“间接访问”得到变量i的空间
}
int main()
{
int i=10;
printf("before change i=%d \n",i);
change(&i); //传递变量i的地址
printf("after change i=%d \n",i);
return 0;
}
结果为:
这是为什么呢?
① 当运行 change(&i); 是将 i的地址传递给 *j ;
②由于 运行*j=5; 是通过 间接访问 访问i的地址,然后在改变i的值,所以 会将主函数中的i值改变。
指针和普通函数的区别
从上述例子可以看出,普通函数的子函数无法突破传统的“值传递”(实参”赋值给形参),而通过“指针”可以实现,因为指针的特点“间接访问”,通过获取该变量的地址,再对其进行值的改变。