引用和指针

文章详细阐述了C++中的引用和指针的区别,包括引用必须初始化且绑定后不可变,而指针是对象且可赋值、拷贝。同时,讨论了const在引用和指针中的应用,const引用不能修改绑定的对象,而const指针不能改变所指对象的值。还提到了常量指针和指针常量的概念。

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

在c++primerplus中,这样写道,引用为对象取另一个名字。 引用类型  引用另一种类型  将写成&d 的形式定义引用类型

程序把引用和和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦引用完成,引用将和她的初始对象一直绑定在一起。也就是说引用必须初始化。

引用不是对象,所以编译器没有给它开辟空间

比如        int r1 = 10; int &d = r1;

指针,指向另一种类型的复合类型。与引用类似,可以实现对其他对象间接访问。不同点是,指针本身是对象,允许赋值和拷贝,而且在生命周期内可以,先后指向几个不同的对象。其次,指针无须定义时初始化,和其他内置类型一样,在块内定义的指针没有初始化,会拥有一个不确定的值。这也就是野指针。

指针的值也就是地址,有四种状态:

1.指向一个对象

2.指向紧邻对象所占空间的下一地址

3.空指针,没有指向任何对象

4.无效指针,除以上其他情况。

其他几个特殊指针

        野指针:指向的内存空间被释放或者未分配内存空间的指针,程序猿试图访问指针指向内存,就会发生未定义行为,而是程序崩溃。

悬浮指针:指针指向的内容失效(生命周期已经结束了,也就是占用的内存空间被释放),再次通过指针去访问,访问无效地址,同样出现未定义行为。(举个例子,比如说,你的朋友昨天告诉你,他家的地址,然后你打算明天去拜访他,但是他今天搬家了,你说你还能找到你朋友的家吗?笑哭)

引用和const

指针和cosnt

const

const限定符,希望英一这样一种变量,它的值不被改变

因为const对象一旦创建其值就不能再改变,所以const对象必须初始化

当以编译初始化的方式顶一个const对象时,编译器将在编译过程中把用到该变量的地方都替换成相应的值。为了实现替换,编译器就必须知道变量初始值,但如果程序包含多个文件,则每个用了const对象的文件都必须能够访问到它的初始值才行。简言之,每个文件都要对const对象进行初始化。当多个文件中出现同名的const变量时,其实是等同于在不同文件中分别定义了单独的变量,如果要实现同名const变量实现共享,需要在一个文件定义const,而在多个文件中声明并使用它。解决办法:对于const变量不管是声明还是定义都添加extern关键字。例如,在file_1.cc文件中定义常量 extern const int bufSize = fcn();在file_1.h头文件中声明extern const int bufSize;

const的引用,对常量的引用 const int c1 = 1024; const int &r1 = c1;

r1 = 1025; //错误,对常量的引用

对const的引用有有两个特例,其余的引用的类型必须与其所引用对象的类型一致

例1: int i = 42; const &r1 = i; //允许将const int& 绑定到普通 int 对象上

例2:允许一个常量引用绑定到一个非常量对象、字面值,甚至是一般表达式

double dval = 3.14; const int &r1 = dval;

//实际编译器会创建一个临时对象

double int temp = dval; const doube &r1 = temp;

const 和指针

与引用一样,可以令指针指向常量或者非常量。

指向常量的指针,不能改变所指向对象的值

const double pi = 3.14;

const double *p = π

常量指针 指针类型必须和所值对象类型一致,但也有例外,允许常量指针指向一个非常量对象

double val = 3.14;

const double * p = &val;

解释:指向常量的指针或引用,不过是指针(引用)他们的自以为是,他们本身认为指向的对象内容不能修改,觉得自己指向了常量,所以自觉地不去修改所指向的对象的值,但你想啊,原始的对象在定义,然后初始化,只要原始对象不是常变量,他的值就是可以修改的啊。

const指针 常量指针

指针是对象,那么也可以向其他对象一样,允许指针本身定为常量。常量指针必须初始化,一旦初始化后,它的值不会再发生改变。

把 *放在const关键字之前以说明指针是一个常量。也就是说指针本身是不变的而不是指向的那个值。

const double pi = 3.14;

const double *const pip = π

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值