C语言 百分网手机站

C语言函数参数传递规律

时间:2020-10-02 09:01:24 C语言 我要投稿

C语言函数参数传递规律

  导语:C语言的模块设计主要是通过函数实现的,函数间信息的传递主要是通过参数实现的。函数的参数传递包括传值和传址。下面就由小编为大家介绍一下C语言函数参数传递规律,欢迎大家阅读!

  1、参数的传递方式

  C语言函数的参数传递可以归纳为两种方式:传值和传址。下面用实例和图示两种方式进行描述。

  1.1传值

  传值传递方式主要出现在实参和形参都是变量的时候,如基类型变量、数组元素、结构体变量作参数时,进行的就是值传递,程序如下:

  在上述的例子中,函数调用时如图1(a)所示。实参将值传给形参,形参在子函数里发生互换,但不能将互换的值传回给实参,结果如图1(b)所示。因此实参在整个过程中没有发生变化,由此可以总结当用普通变量作参数时,进行的是单向的值传递,只能实参传形参,形参无法传实参。

  图1变量作参数的调用过程1.2传址

  该方法中函数调用时参数间传递的地址有以下3种情况:变量的地址作参数、数组名作参数以及指针作参数。由于变量的地址作参数与指针作参数类似,这里就不再举例,主要针对数组名作参数和指针作参数进行探讨。

  1.2.1数组名作参数

  数组名作参数的程序如下:

  void f(int t[],int n)

  {int i; for(i=0;i  void main()

  { int a[4]={1,2,3,4},i; f(a,4); for(i=0;i<4;i++) printf(“%d ”,a[i]);}

  数组名作参数时,传递的是数组的首地址,即实参数组和形参数组共用一段内存空间,如图2(a)所示。在子函数中对数组t的所有元素进行赋值,其实也就是对数组a的所有元素进行赋值,如图2(b)所示。所以当用数组名作参数时,实参和形参共享一个数组,形参数组的改变也就是实参数组的改变,其程序如下:

  void swap(int *a, int *b)

  {int temp; temp=*a;*a=*b;*b=temp;}

  main()

  {int x=3, y=5, *p=&x, *q=&y;

  swap(p,q); printf("%d,%d",*p,*q);}

  图2数组名作参数的调用过程1.2.2指针作参数

  指针作参数与数组名作参数类似,传递的也是地址,但此时不是共享一个数组,而是共享一个变量的地址,即实参指针和形参指针共同指向同一个变量,共享同一个变量地址如图3所示。这时有2种情况:改变形参的指向;改变形参所指向的变量。上面的例子属于第二种情况,形参指向的变量值发生变化,也就是实参指向的变量值发生变化。把此例稍做修改得如下程序:

  void swap(int *a,int *b)

  {int *temp; temp=a; a=b; b=temp;}

  将函数稍做改动后,子函数的功能只是改变了形参指针的.指向,如图4(c)所示。对实参并无影响,从而也不会影响实参所指向的变量值。

  2、结语

  调用函数时,从参数的传递情况来看,其实质就是传值和传址,传值是变量作参数,实参只负责给形参赋初值,形参在整个过程中的改变都不影响实参,所以是单向的值传递。传址是数组名和指针作参数,此时体现的就是共享,数组名作参数,实参和形参共享一个数组,形参数组的改变就是实参数组的改变;指针作参数共享的是同一个变量的地址,即实参和形参共同指向同一个变量,当改变形参所指向的变量值时,实参所指向的变量值也一同改变,因为它们指向的是同一个变量。如果改变的是形参的指向,则不影响实参指针的改变。


【C语言函数参数传递规律】相关文章:

C语言函数参数传递问题11-26

C语言函数调用与参数传递02-01

C语言中函数之间地址传递方式11-13

C语言函数的参数和返回值10-05

C语言中指针变量作为函数参数详解11-20

C语言函数 atoi()10-28

浅谈C语言函数10-22

关于浅谈C语言函数调用参数压栈的相关问题11-20

C语言指针的传递10-06