1、函数参数传值,函数执行结束后实参本身的值并没有变化
#include <stdio.h>
void swap(int a,int b){
int temp=a;
a=b;
b=temp;
}
int main(){
int a=3,b=5;
printf("before swap,a=%d,b=%d\n",a,b);
swap(a,b);
printf("after swap,a=%d,b=%d\n",a,b);
return 0;
}
编译 gcc function.c
执行 ./a.out
打印:
before swap,a=3,b=5
after swap,a=3,b=5
2、函数参数传指针,实际传递的实参是变量的地址,实参(地址)确实也没有变化,但是实参(地址)所存放的变量的值却变化了
#include <stdio.h>
void swap(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
int main(){
int a=3,b=5;
printf("before swap,a=%d,b=%d,&a=%p,&b=%p\n",a,b,&a,&b);
swap(&a,&b);
printf("after swap,a=%d,b=%d,&a=%p,&b=%p\n",a,b,&a,&b);
return 0;
}
编译执行function.c打印:
before swap,a=3,b=5,&a=0x7fff5490d938,&b=0x7fff5490d93c
after swap,a=5,b=3,&a=0x7fff5490d938,&b=0x7fff5490d93c
3、函数参数传传引用,实际上操作的是所引用的对象上,可以改变对象的值
#include <stdio.h>
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int main(){
int a=3,b=5;
printf("before swap,a=%d,b=%d\n",a,b);
swap(a,b);
printf("after swap,a=%d,b=%d\n",a,b);
return 0;
}
编译执行function.cpp打印:
before swap,a=3,b=5
after swap,a=5,b=3