值传递和引用传递
先来看两个实列,观察值传递和引用传递的区别。
zhi.c 值传递例子
#include <stdio.h>
void swap(int a, int b);
void main(void) {
int a=100;
int b=200;
printf("a=%d\n", a);
printf("b=%d\n", b);
swap(a, b);
printf("a=%d\n", a);
printf("b=%d\n", b);
}
void swap (int a, int b) {
int temp;
temp=a;
a=b;
b=temp;
}
编译 gcc zhi.c -o zhi,./zhi 执行结果:
wangjing@ubuntu:~/script$ ./zhi
a=100
b=200
a=100
b=200
dizhi.c 引用传递例子
#include <stdio.h>
void swap(int *a, int *b);
void main(void) {
int a=100;
int b=200;
printf("a=%d\n", a);
printf("b=%d\n", b);
swap(&a, &b);
printf("a=%d\n", a);
printf("b=%d\n", b);
}
void swap (int *a, int *b) {
int temp;
temp = *a;
*a=*b;
*b=temp;
}
编译 gcc dizhi.c -o dizhi,./dizhi 执行结果:
wangjing@ubuntu:~/script$ ./dizhi
a=100
b=200
a=200
b=100
通过上面两个实例,引有传递方式形参是指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行操作。传引用与传值调用不同,引用调用在函数内部改变了 a 和 b 的值,实际上也改变了函数外 a 和 b 的值。传递指针可以让多个函数访问指针所引用的对象,而不用把对象声明为全局可访问。
(完)