指针和引用

本文详细介绍了C++中的指针和引用,包括它们的定义、使用方法、初始化和赋值。指针是一种存放对象地址的数据类型,可以间接访问对象,但未初始化的指针可能导致运行时错误。引用则作为已存在对象的别名,一旦绑定就不能改变。在函数参数传递中,引用能提高效率并防止意外修改,而指针可能需要额外的解引用操作。指针和引用各有优缺点,它们在C++中互相补充,提供了灵活的编程选项。

指针

什么是指针

我们常说指针指向某个对象,是因为指针存放某个对象的地址,通过该地址可以达到间接访问该对象的目的

指针的使用

指针的定义
  • 声明变量时,要在变量名前加*符号
  • 如果在一条声明语句中定义了多个指针变量,每个变量前都要加*符号
int *ip1=nullptr,*ip2=nullptr;//ip1和ip2都是指向int类型的指针
double d,dp1=nullptr;//d是double型变量,dp1是指向double类型的变量
获取对象地址

我们需要将一个地址值传给一个指针变量,而取地址符&可以用来获取对象的地址,对于数组,其数组名就是数组的首地址。

间接访问对象

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

在这里插入图片描述
在这里插入图片描述

&p1类型是int**,相当于是指针的指针

int ival = 10;
int iarr[5] = {
   
    1,2,3,4,5 };
int *ip1 = &ival;//此时ip1存放变量ival的地址,或者说ip1是指向变量ival的指针
int *arrp = iarr;//此时arrp存放数组iarr的首地址,或者说arrp是指向数组iarr的指针
指针的初始化
  • 通常指针的类型必须和所指向对象的类型一样,除了下面两个例外

  • 指向常量的指针可以指向非常量对象

    int ival=10;
    const int *ip=&ival//正确,但是不能通过ip来改变ival的值,即*ip=11是错误的
    
  • 基类的指针可以指向其派生类对象

虽然指针无需在定义时赋值,但是未经初始化的指针常常会引发运行时错误。

如果使用了未经初始化的指针,则该指针所占内存空间的内容被看作一个地址值,访问该指针相对于访问一个本不存在的位置上的不存在的对象。

建议初始化所有指针,如果一开始不知道指针指向某个对象,可以将它初始化为nullptr,这样程序就能检测并知道它没有指向任何具体的对象。

指针的赋值

给指针赋值其实就是使指针变量存放一个新的地址,从而指向一个新的对象;

但是有时候我们容易搞混,到底是改变了指针的值还是改变了指针所指向对象的值

记住赋值永远改变的是等号左侧的对象

int main()
{
   
   
	int ival1 = 10;
	int ival2 = 20;
	int *ip1 = &ival1
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倒地不起的土豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值