C/C++系列之复杂引用

≯℡__Kan透↙ 提交于 2019-11-28 20:41:23

以struct类型为例:

  • 引用
#include"iostream"
#include<string>
using namespace std;
struct mycoach
{
    string name;
    int age;
};

void printinfo1(mycoach &cpc)
{
    //参数是mycoach实例的别名,指向入参的真实地址,所以一改入参的值也跟着改
    cpc.name = "陈培昌";
}

void main()
{
    mycoach coach1;
    coach1.name = "徐晓冬";
    printinfo1(coach1);
    cout << "这位神秘嘉宾是" << coach1.name << endl;//陈培昌
    system("pause");
}

输出结果:

 

  •  形参传入----可以预见这种方式不会改变struct实例的值
#include"iostream"
#include<string>
using namespace std;
struct mycoach
{
    string name;
    int age;
};

void printinfo1(mycoach cpc)
{
    //参数是mycoach实例的别名,指向入参的真实地址,所以一改入参的值也跟着改
    cpc.name = "陈培昌";
}

void main()
{
    mycoach coach1;
    coach1.name = "徐晓冬";
    printinfo1(coach1);
    cout << "这位神秘嘉宾是" << coach1.name << endl;
    system("pause");
}

输出结果:

 

  •  指针---效果同引用
#include"iostream"
#include<string>
using namespace std;
struct mycoach
{
    string name;
    int age;
};

void printinfo3(mycoach *cpc)
{
    //和引用效果一样,入参为指针类型,可以更改指向地址的数据
    cpc->age = 40;
    cout << "hello, myname is " << cpc->name << "今年芳龄" << cpc->age << endl;
}

void main()
{
    mycoach coach1;
    coach1.name = "徐晓冬";
    mycoach *xxd = &coach1;
    printinfo3(xxd);
    cout << "这位神秘嘉宾是" << coach1.name << endl;
    system("pause");
}

输出结果:

 

 

 通过代码可以看出,函数中传入的指针和struct实例处于同一内存地址上

#include"iostream"
#include<string>
using namespace std;
struct mycoach
{
    string name;
    int age;
};

void printinfo3(mycoach *cpc)
{
    //和引用效果一样,入参为指针类型,可以更改指向地址的数据
    cpc->age = 40;
    cout << "hello, myname is " << cpc->name << "今年芳龄" << cpc->age << endl;
    printf("内存地址是%d\n",cpc);
}

void main()
{
    mycoach coach1;
    coach1.name = "徐晓冬";
    mycoach *xxd = &coach1;
    printinfo3(xxd);
    cout << "这位神秘嘉宾是" << coach1.name << endl;
    printf("struct实例地址是%d\n", &coach1);
    system("pause");
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!