【基础知识补充】C++中 & 与 * 的使用

本文详细介绍了C++中的引用和指针。引用作为对象的别名,必须在定义时初始化且不可改变,而指针本身是对象,可以赋值和拷贝,可以指向不同对象。文中通过实例展示了引用的赋值操作以及指针的地址获取、指针值的四种状态和解引用访问对象的方法。同时,强调了在声明与表达式中,&和*的双重角色。

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

1、引用【&】

引用(reference)为对象起了另外一个名字,即别名。形式:数据类型 &变量名=XXX

int ival = 1024;
int &refVal = ival;    // 正确:refVal 指向ival(是 ival 的另一个名字)
int &refVal2;          // 报错:引用必须被初始化

refVal = 2;            // 正确:把 2 赋给 refVal 指向的对象,此处即是赋给了 ival
int ii = refVal;       // 正确:与 ii = ival 执行结果一样【引用赋值】,ii 被初始化为 ival 的值

int &refVal3 = refVal; // 正确:refVal3 绑定到了那个与 refVal 绑定的对象上,这里就是绑定到ival上

int &refVal4 = 10;     // 报错:引用类型的初始值必须是一个对象
double dval = 3.14;
int &refVal5 = dval;   // 报错:此处引用类型的初始值必须是int型对象    

引用赋值:把值赋给了与引用绑定的对象。

2、指针【*】

与引用类似,也实现了对其他对象的间接访问。形式:数据类型 *变量名;

int *ip1, *ip2;    // ip1和ip2都是指向int型对象的指针
double dp; *dp2;   // dp2是指向double型对象的指针,dp是double型对象

注:1、指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。
        2、指针无须在定义时赋初始值

获取对象的地址

        指针存放某个对象的地址,想要获取该地址,需要使用取地址符(操作符&)

int ival = 42;
int *p = &ival;    // p存放变量ival的地址,或者说p是指向变量ival的指针

指针值

指针的值(即地址)的四种状态:
        1、指向一个对象。
        2、指向紧邻对象所占空间的下一个位置
        3、空指针,意味着指针没有指向任何对象
        4、无效指针,也就是上述情况之外的其他值

利用指针访问对象

        如果指针指向了一个对象,则允许使用解引用符(操作符*)来访问该对象

int ival = 42;    
int *p = &ival;    //p存放着变量ival的地址,或者说p是指向变量ival的指针
cout << *p;        //由符号*得到指针p所指的对象,输出 42

*p = 0;            //由符号*得到指针p所指的对象,即可经由p为变量ival赋值,即ival=0
cout << *p;        //输出0

关键概念 

        像&和*这样的符号,既能用作表达式里的运算符,也能作为声明的一部分出现,符号的上下文决定了符号的意义:

int i = 42;
int &r = i;    // &紧随类型名出现,因此是声明的一部分,r是一个引用
int *p;       // *紧随类型名出现,因此是声明的一部分,p是一个指针
p = &i;        // &出现在表达式中,是一个取地址符
*p = i;        // *出现在表达式中,是一个解引用符
int &r2 = *p;  // &是声明的一部分,*是一个解引用符

在声明语句中,& 和 * 用于组成复合类型;在表达式中,它们的角色又转变成运算符。在不同场景下出现的虽然是同一个符号,但是由于含义截然不同,所以我们完全可以把它当做不同的符号来看待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值