Chinaunix首页 | 论坛 | 博客
  • 博客访问: 163052
  • 博文数量: 25
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 319
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-12 21:27
文章分类

全部博文(25)

文章存档

2015年(2)

2014年(1)

2013年(22)

我的朋友

分类: C/C++

2013-06-05 13:17:33

函数参数传递的都是一个个具体值,不管是传一个int还是char或者数组。其实本质都是传递了一个值。如果是int那就是int类型值,如果是char那就是char类型的值,如果是指针或者数组,那就是一个地址的具体值,一个长整型的值。所以说函数传的参数都是具体值,不管你写的是指针还是数组。

现在我们看看例子,定义:void funint aint *p);调用fun5&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;

}

阅读(1072) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~