这一篇我们来看看没有返回,只靠形参、实参传递参数的函数,先来学习最简单的一种:

1、传值调用(赋值传递)

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 void swap(int a,int b)
 6 {
 7     int temp;
 8     printf("交换前,a=%d  b=%d \n",a,b);
 9     temp=a;
10     a=b;
11     b=temp;
12     printf("交换后,a=%d  b=%d \n",a,b);
13 }
14 int main()
15 {
16     int x=10,y=20;
17     printf("交换前,x=%d  y=%d \n",x,y);
18     swap(x,y);
19     printf("交换后,x=%d  y=%d \n",x,y);
20     return 0;
21 }

从运行程序结果可以看出:被调函数swap只对形参操作,实参无变化。显然,传值调用属于单向值传递,函数运行结果不影响、不改变调用函数的实参。看过了最简单的,下面来看看复杂一点儿的————引用调用(指针传递、赋地址传递)。C语言中,这个词也被叫做“指针传递”、“赋地址传递”。在C++语言中,则有另外的含义了。用起来,也会方便许多,但是,C语言不支持。引用调用(指针传递、赋地址传递)分为同级指针传递,和二级指针传递2种方式,下面先来看看同级指针传递:

2、同级指针传递

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 void swap(int * a,int *b)
 6 {
 7     int temp;
 8     printf("a地址:%p    b地址:%p    \n",a,b);
 9     printf("交换前,a=%d  b=%d \n",*a,*b);
10     temp=*a;
11     *a=*b;
12     *b=temp;
13     printf("交换后,a=%d  b=%d \n",*a,*b);
14 }
15 int main()
16 {
17     int x=10,y=20;
18     printf("x地址:%p    y地址:%p\n",&x,&y);
19     printf("交换前,x=%d  y=%d \n",x,y);
20     swap(&x,&y);
21     printf("交换后,x=%d  y=%d \n",x,y);
22     return 0;
23 }

本例传输的是2个变量的地址,实参传送的是&x,&y2个变量的地址,形参定义了2个指针变量int *a,int *b来接收,相当于a=&x,b=&y。如果把&x和&y也看成指针,则有*a=*(&x)=x,*b=*(&y)=y。显然,对其解引用后,所得值为变量的值,而不是地址。所以称之为同级指针传递。

版权声明:本文为GoldCrop原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/GoldCrop/p/11065311.html