您的位置:首页 > 编程语言 > C语言/C++

C语言学习笔记.指针3--指针变量作为函数参数

2008-10-25 12:24 591 查看
谭浩强的C语言教程中关于指针变量作为函数参数的说明中举了以下的例子:

swap(int *p1,int *p2)

{int temp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

main()

{

int a,b;

int *pointer_1,*pointer_2;

scanf("%d,%d",&a,&b);

pointer_1=&a;pointer_2=&b;

if(a<b) swap(pointer_1,pointer_2);

printf("\n%d,%d\n",a,b);

}


该例子中将需要互换a,b的值,利用指向a,b的指针变量 互换pointer_1,pointer_2的指向的值。
为什么要这么做呢?为什么不直接交换a,b的值呢?不得不想起,C语言之前的知识
函数的参数分为形参和实参两种:
形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
函数的形参和实参具有以下特点:
1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
从第四点看出 其实我们是无法写一个方法直接交换a,b的值的 在C#中,是可以做到这样的 原因应该是c#和JAVA语言中的方法封装了指针的操作,隐藏了较为底层的操作部分 其中虽然可以分的出形参与实参 但区别它们的意义已经不大了 这个也是函数与方法的区别之一吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐