typedef&引用&指针引用

本文深入解析C++中的引用概念,包括基本定义、使用规范及其与对象之间的绑定关系。同时,文章还探讨了引用在不同场景下的应用,如常量引用、指针引用,并对比了引用与指针的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

typedef:声明新的类型名来代替原有的类型名,比如:

typedef int INTEGER;

相当于用INTGER来代表int类型,习惯上把用typedef声明的类型用大写字母表示。

引用:

引用说白了就是为对象另外起了一个名字,定义了一个引用之后所有的操作都是在引用绑定的对象上进行的

定义方式: 将声明符写成&d的形式来定义引用类型其中d是声明的变量名,

int size = 100;

int &sum = size;

要注意的是我们在引用的时候必须要给引用赋值,出生即绑定,像直接int &size 这种方式是不可以的。

那么问题来了:我们可不可以定义引用的引用呢?答案当然是不可以了,为什么呢?因为我们说引用只是给对象起了个另外的名字,引用并不是一个对象,所以我们不能这么做。另外,我们可以给一个对象绑定多个引用

另外,值的注意的是:其他所有类型的引用和要绑定的对象都要严格匹配,另外,引用只能绑定到对象上,而不能绑定到字面值或者某个表达式的计算结果上。但是对于常量引用,这条法则不适用,详细见之后<>处:

常量引用:

int a=1;

const int &t1= a;

const int a=1;

const int &t2= a;

这里的t1,t2都是常量引用。

关于常量引用相关的例子:

int ai=10;

const int ci= 100;

const int &si= ai;//正确的,常量引用可以指向非常量对象

const int &r1 = ci;  //正确的,引用及对象都是常量

r1 = 11 //这是错误的,因为r1是常量引用,不能修改它所绑定的对象的值

int &r2 = ci //这是错误的,不能让一个非常量引用指向一个常量对象,因为非常量引用意味着可以修改对象的值;对象本身是常量,不能更改,所以矛盾。

总结:

const int &指向int    合法 ,不可修改对象值

const int &指向const int     合法 ,不可修改对象值

int&指向 int     合法,可修改对象值

int &指向 const int       不合法 

<>

特例1:在初始化常量引用时允许使用任意表达式作为初始值,只要该表达式的结果最终能转化为引用的类型就行了。

特例2:允许为一个常量引用绑定非常量的对象,字面值甚至一个一般表达式。即const int &p=100;和const int &p=a+b;合法。

指针引用

数据结构教材实例:

List  *&p 等价于 List*  &L 。List*  表示 一个指针类型的List结构,&L表示一个引用,而且是一个指针引用。List *L  是 一个List类型的指针。二者使用的区别:在传递的函数参数是指针类型的话,那么编译器会复制一个指针,那么我们在函数内部使用的指针就是复制 之后的指针,而不是原来的指针了。如果需要使用原来的指针 ,则需要传递指针引用。即:List *&L,那么我们在函数 内部操作的指针 还是 原来传过来的指针对象,也就是说:如果要对这个指针的本身进行操作和改变其内容,就必须使用引用(List *&p),而如果只是为了用它间接访问的功能(*p)就可以直接传List *p。下面来个 例子说明下:

<span style="font-size:12px;">void function_1( int *p)
{
    p++;//复制的指针变化,原指针不变
}
void function_2(int *&p)
{
    p++;
}
int a[100];
int *p = a;
function(p);
 // p指向第一个元素
function_2(p);
//p 指向第二个元素</span>

总结来说:
一般的传指针,那么都是复制一个指针,
如果想要使用原有的指针,就使用指针引用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值