分类: C/C++
2013-06-05 13:17:33
函数参数传递的都是一个个具体值,不管是传一个int还是char或者数组。其实本质都是传递了一个值。如果是int那就是int类型值,如果是char那就是char类型的值,如果是指针或者数组,那就是一个地址的具体值,一个长整型的值。所以说函数传的参数都是具体值,不管你写的是指针还是数组。
现在我们看看例子,定义:void fun(int a,int *p);调用fun(5,&n);这个例子我们看到形参a给的值是5,形参指针p给的是n的地址,地址是个长整型值,所以说函数参数传递的都是值,只是有的传递的是直接的值,有的是地址,对于传的是地址,我们在函数中使用时,就是对这个地址进行赋值或者从地址中取值。我们传参时传地址的好处是我们对其操作不会随函数的终止而丢失。函数内的普通变量是会随函数终止而释放的,静态变量的生存期是整个程序。而我们传地址,我们操作的是地址,那个地址处的值被修改了,但是我们的函数不会因为函数的结束而修改那个地址的值,所以我们传地址的作用就是相当于在函数中使用了全局变量一样。
这只是我的简单理解,也是写给指针的初学者,所以就这样把最简单的意思表达一下,希望能帮助理解吧。
多插一句,对于初学者,很多人对实参和形参分不清楚,实参就是例子中的5和&n,形参就是函数声明中的a和*p,实参和形参在名字上没有任何关系,不用名字相同,但是类型一定要相同。实参是传递给函数的真是值,而形参是接受传来的值的变量。
例子代码:
#include
void fun(int a,int *p)
{
a=10;
*p=10;
}
int main()
{
int a;
int n;
a=5;
n=5;
fun(a,&n);
printf("After fun: a=%d n=%d\n",a,n);
return 0;
}