跳转至

函数的传值调用

值传递

// 值传递
void fun(int x)
{
   x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加程序运行时间,降低了程序的效率
}


int main()
{
    int y = 0;
    fun(y);
    cout<< "y = " << y << endl; //y = 0;
}

指针传递

// 指针传递
void fun(int *x)
{
   *x += 5; //修改的是指针x指向的内存单元值
}

int main()
{
    int y = 0;
    fun(&y);
    cout<<"y = "<<y<<endl; //y = 5;
}

引用传递

// 引用传递
void fun(int &x)
{
    x += 5; //修改的是x引用的对象值 &x = y;
}

int main()
{
    int y = 0;  //引用的实参必须初始化
    fun(y);
    cout<<"y = "<<y<<endl;   //y = 5;
}

& 取地址符号

// 关于&的举例
#include <bits/stdc++.h>

using namespace std;

char a, b, c;

int main()
{
    a = 'a', b = 'b', c = 'c';
    cout << &a << '\n';

    return 0;
}


// 代码1
#include <iostream>

using namespace std;

void swap(int a, int b)
{
    int t = a; 
    a = b;
    b = t;
}

int main()
{
    int a = 1, b = 2;
    swap(a, b);
    cout << a << ' ' << b << '\n';

    return 0;
}

/*
1 2
*/


// 代码2
#include <iostream>

using namespace std;

void swap(int &a, int &b)
{
    int t = a; 
    a = b;
    b = t;
}

int main()
{
    int a = 1, b = 2;
    swap(a, b);
    cout << a << ' ' << b << '\n';

    return 0;
}

/*
2 1
*/


#include <bits/stdc++.h>

using namespace std;

void f(char *a, char *b)
{
    a = b;
    (*a)++;
}

int main()
{
    char c1, c2;
    char *p1, *p2;

    c1 = 'A', c2 = 'a';
    p1 = &c1, p2 = &c2;

    f(p1, p2);

    cout << c1 << ' ' << c2 << '\n';

    return 0;
}