C语言学习笔记.指针3--指针变量作为函数参数
2008-10-25 12:24
591 查看
谭浩强的C语言教程中关于指针变量作为函数参数的说明中举了以下的例子:
该例子中将需要互换a,b的值,利用指向a,b的指针变量 互换pointer_1,pointer_2的指向的值。
为什么要这么做呢?为什么不直接交换a,b的值呢?不得不想起,C语言之前的知识
函数的参数分为形参和实参两种:
形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
函数的形参和实参具有以下特点:
1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
从第四点看出 其实我们是无法写一个方法直接交换a,b的值的 在C#中,是可以做到这样的 原因应该是c#和JAVA语言中的方法封装了指针的操作,隐藏了较为底层的操作部分 其中虽然可以分的出形参与实参 但区别它们的意义已经不大了 这个也是函数与方法的区别之一吧
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语言中的方法封装了指针的操作,隐藏了较为底层的操作部分 其中虽然可以分的出形参与实参 但区别它们的意义已经不大了 这个也是函数与方法的区别之一吧
相关文章推荐
- 学习笔记---指针法访问数组、数组的实质、数组/指针作为函数参数
- c语言指针的学习(指针作为函数的参数)
- 指针学习:指针变量作为函数参数实现交换两个整数
- 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别
- Kotlin语言学习之将函数作为参数传递,使用双冒号::引用其他方法
- 2.关于结构体以及结构体数组作为函数入口参数的方法(学习笔记)
- C语言学习笔记【指针03】指向函数的指针与返回指针值的函数
- 指针的学习(3)指针作为函数的参数的输入和输出的参数的特性
- 奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记
- 11.19C语言----指针变量作为函数参数
- c语言 - 指针作为函数参数
- 以指针作为函数参数,不能改变实参指针变量的值从而改变实参值
- JNI学习笔记:数组作为函数参数
- 奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记之二
- C++学习笔记:函数指针语法基础以及函数指针做函数参数的思想剖析
- C语言学习6 :指针的定义,指针类型要合法,指针要初始化,指针做函数参数,数组和指针的通用性,指针+1所代表的空间,void * 指针,交换函数中的指针,数组和字符型指针区别,字符型指针的应用,使用指针完成字符操作函数
- C语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数
- C语言学习笔记 (005) - 二维数组作为函数参数传递剖析
- 我的c++学习(12)指针作为函数参数
- C++学习笔记(三)--函数参数,数组函数,指针和const,二维数组函数,递归,函数指针