值传递、指针传递、引用传递

指针和引用

指针:是一个变量,存储着一个地址(占4个字节),这个地址指向一块内存。
引用:是一个已有变量的别名,所以引用在创建的时候就需要初始化。

#include <iostream>
using namespace std;

typedef struct{
    int a;
    int b;
    int c;
    void (*function1)(int);
    void (*function2)(int *);
    void (*function3)(int &);
}param;

void function1(int _a)
{
    _a += 10;
}
void function2(int *b)
{
    *b += 10;
}
void function3(int &c)
{
    c += 10;
}

int main(void)
{
    param param1 = {10,20,30,function1,function2,function3};
    
    //值传递,形参是实参在栈中的拷贝,形参是实参的副本。从被调用函数来看,
    //值传递是单向的(实参—>形参),即参数值只能传入。(效率低下)
    param1.function1(param1.a); 

    //指针传递,形参是指向实参地址的指针,改变形参指向地址的值同样也会改变实参的值。
    param1.function2(&param1.b);

    //引用传递,形参相当于实参的“别名”,形参在栈。中开辟了空间,保存的是实参的地址。
    //被调函数对形参进行的任何操作都被认为是间接寻址。所以会影响实参的值
    param1.function3(param1.c); 

    cout << "param1.a: " << param1.a << endl;
    cout << "param2.b: " << param1.b << endl;
    cout << "param3.c: " << param1.c << endl; 

    system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/xiongyungang/p/10715350.html