C/C++函数传值、传指针、传引用

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

猜你喜欢

转载自blog.csdn.net/u013795543/article/details/108209678