C语言之旅(5)参数传递(值传递,指针传递,数组传递)

来源:互联网 发布:数据库脱机要多久 编辑:程序博客网 时间:2024/05/16 15:09

看下图:值传递


在这里我写了一个加法的函数 int Add(int a,int b); a,b是函数的形参;在这个程序中1,2是实参。值传递:实参赋值给形参,在我调用Add(1,2);函数的时候,其实是实现了两步:

1.a=1,b=2;

2.执行函数。这就是值传递。

指针传递:


从上图可以看出来我明明要进行数值c,d的交换,但是为什么输出的结果依旧是原来的。因为在这个时候你用的是值传递,并没有改变原来的主函数的值,就是操作的作用域不同,其实在调用这个函数的时候执行了两步:

1.a=c,b=d;(这个时候a=1,b=2;并且原来的c=1,d=2;)

2.在Exchange(int a,int b);函数中进行数值的交换,但是交换的只是局部变量a和b并没有改变c和d.

所以应该用下面的方法:指针传递:


在这里面,Exchange(int *a,int *b);这个函数传递的是c和d的地址。所以在Exchange函数里面操作的两个内存空间,是真正的c和d的内存空间。所数值交换也是交换了c和d的数值。

因此,如果我们想要改变数值的实参的话就应该传递实参的地址,值传递不能对实参进行任何的改变。

数组传递:

int arr[4]={1,2,3,4};

void MySort(int arr[]);

在这个排序的函数中,int arr[]的意思相当于 int * p;

当数组当做参数传递的时候,数组就相当于是指针,这是后传递的是数组首元素的首地址。

阅读全文
0 0
原创粉丝点击