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分配内存空间
}
“`
- C++,返回对象的引用,语法练习
- 【C/C++ 语法备忘】3、类的相互引用
- C++的引用语法
- C++,类,对象,引用--语法练习.
- C/C++高阶语法:引用
- [语法比较][指针/引用]Lava和C/C++语法比较
- C++“引用”的理解
- c的语法总结
- SQL语句的基本语法 汇总,引用
- 【语法】指针和引用的区别
- Lambda的语法和方法引用
- “语法”之所以成为“语法”--从类的“引用成员”说起。
- 【C/C++语法外功】传值&传引用&传指针
- 【C/C++语法外功】传值&传引用&传指针
- 【C/C++语法外功】传值&传引用&传指针
- 【C/C++语法外功】传值&传引用&传指针
- [C++] 引用和指向指针的引用
- 关于C++引用C,C引用C++,extern的使用
- UVA 1583 Digit Generator
- 关于对初学者ps合成工具使用的问答
- 最大似然估计学习总结
- 有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。在客户端有一个类为TestC,有一个方
- android TextView中文字通过SpannableString设置属性
- C++的引用语法
- 旋转数组的最小数字
- 计算机网络 之 IP地址、子网掩码与默认网关
- 黑马程序员——010——JavaAPI②(集合框架(List之ArrayList)、迭代器、枚举)
- 编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过
- Android 自动注释,导入模板文件
- POJ1503Integer Inquiry高精度的加法
- 单一控制器实现员工信息管理
- Light OJ 1407 - Explosion 【2-sat之 3布尔变量的处理 — 枚举所有状态判断是否存在可行解 + 反向输出可行解】【好题】