C++的引用语法

来源:互联网 发布:淘宝售后评价解释话术 编辑:程序博客网 时间:2024/06/16 22:44

(一)
a,引用的语法概念:Type &name = var;

b,引用的意义:
1)引用作为其它变量的别名而存在,因此在一些场合可以代替指针
2)引用相对于指针来说具有更好的可读性和实用性
例:

void myswap2(int *a, int *b)    //C语言利用指针间接赋值//可以交换{    int c = 0;    c = *a;    *a = *b;    *b = c;}void myswap3(int &a, int &b)    //C++语言中的引用//可以交换{    int c = 0;    c = a;    a = b;    b = c;}

c,引用的本质:
1)引用在C++中的内部实现是一个常指针
Type& name Type* const name
2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。
3)从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏。例:

void modifyA1(int &a1){    a1 = 300;}void modifyA2(int * const a1){    *a1 = 200;}

这两个是等效的函数 ,只不过调用使用了引用的函数不用手工取地址,C++内部会自动取地址,但是使用指针的函数,需要我们手动取地址。

(二),引用的运用:
a,普通运用:

void main(){    int a = 10;        int &b = a;//引用语法    b = 100;    //相当于把a改成100    printf("b:%d \n", b);    printf("a:%d \n", a);    system("pause");}

注意点:
1:普通引用必须依附于变量 即必须初始化,如:

void main(){    int a = 10;    int &b = a;    int &c;//这句报错,普通引用必须依附于变量 即必须初始化    system("pause");}

2:引用做函数参数可以不初始化,

3:引用变量占内存。

b,指针引用,

#include <iostream>using namespace std;struct Teacher{    char name[64];    int age;};//在被调用函数 获取资源int getTeacher(Teacher **p){    Teacher *tmp = NULL;    if (p == NULL)    {        return -1;    }    tmp = (Teacher *)malloc(sizeof(Teacher));    if (tmp == NULL)    {        return -2;    }    tmp->age = 33;    //p是实参的地址  *实参的地址  去间接修改实参的值    *p = tmp;}//指针引用int getTeacher2(Teacher * &tmp){    tmp = (Teacher *)malloc(sizeof(Teacher));    if (tmp == NULL)    {        return -1;    }    tmp->age = 36;}void FreeTeacher(Teacher *pT1){    if (pT1 == NULL)    {        return;    }    free(pT1);}void main(){    Teacher *pT1 = NULL;//  getTeacher(&pT1);    getTeacher2(pT1);    cout << "age:" << pT1->age << endl;    FreeTeacher(pT1);    system("pause");}c,常引用实例运用1
int x = 20;const int &y = x;   //常引用是让变量引用只读属性  不能通过y去修改x了//y = 20;//报错  不能修改
实例运用2:

void printTeacher(const Teacher &myt)
{
//常引用让实参变量拥有只读属性
printf(“myt.age:%d”, myt.age);
//myt.age = 40; //不能修改
}

void main()
{
Teacher t1;
t1.age = 36;
printTeacher(t1);

system("pause");

}

常引用的两种初始化方式:1:

{
int x1 = 30;
const int &y1 = x1; //用x1变量去初始化常引用
}

2:

//2用字面量 初始化常量引用
{
const int a = 10; //C++编译器把a放在符号表中
//int &m = 41; //41没有内存,所以无法引用
//引用就是给内存取别名
const int &m = 43; //正确的初始化方式
//c++编译器 会为m分配内存空间
}
“`

0 0
原创粉丝点击