C++ ---------- const 指针 / void 指针 / 引用

本文对比了C++中的const指针、void指针和引用,介绍了void类型的包容性,以及指向数据成员和对象成员函数的指针。特别讨论了this指针,它在每个成员函数中隐式使用,指向调用成员函数的对象。此外,还阐述了引用的概念,作为变量的别名,引用必须在声明时初始化,不可改变引用对象,但可以取引用的地址。在函数调用中,引用形参实现了传址方式,避免了临时变量的内存分配。

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

各类指针对比

变量定义类型表示含义
int *p ;int *定义p为指向整型数据的指针变量
int *p[4];int * [4]定义指针数组,是由4个指向整形数据的指针元素组成
int (*p) [4];int (*) [4]p为指向包含4个元素的一维数组的指针变量
int *p();int * ()p为返回一个指针的函数,该指针指向整型数据
int (*p)();int (*)()p为指向函数的指针,该函数返回一个整型值
int **p;int **p是一个指针变量,它指向一个指向整型数据的指针变量
const int *pconst int *p是指向常量的指针变量,不能通过p改变其指向的变量的值
int const *pint const *p是常指针,其指向不能改变
const int *const pconst int * constp是指向常量的指针,其指向不能改变,且不能通过p改变其指向的变量的值
void * pvoid *p是一个指针变量,基类为void(空类型),不指向具体的对象

viod 类型可以包容其他类型,而其他类型不能包容void

  • 指向数据成员的指针
p1 = &t1.hour
  • 指向对象成员函数的指针
void(Time::*p2)(); //定义p2为指向Time类中公用成员函数的指针变量
p2 = &Time::get_time();
  • this指针
    每个对象中的数据成员都分别占有存储空间,如果对同一个类定义了n个对象,则有n个同样大小的空间以存放n个对象的数据成员。但是不同的对象都要调用同一个函数的代码。所以在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。this指针是隐式使用的,它作为参数被传递给成员函数。
//可以张扬理解
a.volume(&a)//函数定义
int Box::volume(Box *this)
{
return (this->height*thiswidth*this->length)
}

引用

对一个数据可以建立一个引用,它的作用是为一个变量起一个别名.

int a; //定义a是整型变量
int &b = a; //声明b是a的引用

这里的&是引用声明符。在数据类型名后面出现的&是引用声明符,在其他场合出现的都是地址符。

  • 引用不是一种独立的数据结构,对引用只有声明没有定义;
  • 声明一个引用是,必须同时使之初始化,即代表它是代表哪一个变量;
  • 在声明一个引用后,不能再使之作为另一个变量的引用;
  • 不能建立引用数组;
  • 不能建立引用的引用,不能建议指向引用的指针;
  • 可以取引用的地址;

在函数声明形参时,指定整型变量的引用,调用函数,是地址传递方式,即传址方式。
函数调用的传值方式和传址方式的最大区别:传值方式时临时变量必须分配空间,而传址方式,由于形参是引用,系统会自动将实参的地址传递给形参,并没有新分配空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值