引用、指针与const修饰符总结


引用

引用就是变量的一个别名,对同一个存储单元起了两个不同的名字。

引用在定义时必须进行初始化,而且必须用同类型的对象进行初始化。如下面的例子所示:

int ival = 1024;
int &refVal = ival;  // ok
int &refVal2; // error
int &refVal3 = 10; // error

const引用

const引用变量是指定义的变量自以为自己是一个相应const变量的引用。事实上,const引用可以与不同但相关类型的非const变量进行初始化。具体如下:
int i = 42;
const int &r = 42; // OK
const int &r2 = r+i; // OK
double dval = 3.0;
const int &ri = dval; // OK

指针

指针的定义就不罗嗦了,主要关注一下、指针的可能取值、指针的初始化、void*指针、指针的下标操作、const与指针的结合

指针的可能取值

共有三种:1 某个特定对象的地址;2 某个对象的后一个对象;3 0值。具体如下:

int ival = 1024;
int *pi3 = 0; //3
int *pi1 = &ival; //1

另外需要注意,虽然指针可以不必在定义的时候初始化,但是一定要避免使用未初始化的指针。

指针的初始化

初始化也有三种类型:1 0值常量表达式;2 类型匹配的对象地址或下一地址;3 同类型的另一个有效指针。具体如下:

int ival = 0;
const int c_ival = 0;
int *pi = c_ival;  // OK
pi = 0; // OK
pi = ival; // error

viod*指针

viod*指针的作用:存储任何对象的地址。

void*指针的操作十分有限:1 与另一个指针进行比较;2 作为函数的返回值或者参数类型;3 给另一个void*指针赋值。典型用法如下:

int i = 3;
int *pi = i;
void *pv = &i; //OK
pv = pi; // OK

指针的下标操作

指针的下标操作如同数组,但需注意不要对非法地址进行解引用。

指针与const的结合

指针与const的结合有两种方式:1 指向const对象的指针;2 const指针。定义如下:

int i = 10;
const int *pi;
int const* pic = &i; // 必须在定义时对const指针进行初始化,就像对待const对象以及const引用一样

指向const对象的指针是指该指针自以为指向了const对象,因此可以用同类型的const对象或者非const对象对其进行初始化。但是不能通过该指针来对指向的对象进行修改。但可以更改该指针指向的对象。

const指针则必须在定义时初始化。并且不能重新指向同类型变量,即使是自己也不可以。(详见《C++ Primer》第四版111页)

另外需要注意,如下的代码表示的是const指针而非指向const对象的指针:

typedef int *pint;
const pint cint;
这里,typedef不是简单的文本扩展。const修饰的pint,而pint是指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
指针const修饰符的组合可以用于以下三种情况: 1. 指向常量的非常量指针:使用const修饰指针所指向的对象,表示该对象为常量,但指针本身可以修改。 ```cpp const int* p; // 指向常量int的非常量指针 ``` 在上述示例中,p是一个指向常量int的非常量指针。这意味着p所指向的int对象是常量,不能通过p来修改该对象的值,但p本身可以指向其他int对象。 2. 指向非常量的常量指针:使用const修饰指针本身,表示指针本身是常量,但指针所指向的对象可以修改。 ```cpp int* const p; // 指向非常量int的常量指针 ``` 在上述示例中,p是一个指向非常量int的常量指针。这意味着p可以用来修改所指向的int对象的值,但p不能重新指向其他int对象。 3. 指向常量的常量指针:同时使用const修饰指针本身和指针所指向的对象,表示指针本身和所指向的对象都是常量。 ```cpp const int* const p; // 指向常量int的常量指针 ``` 在上述示例中,p是一个指向常量int的常量指针。这意味着p所指向的int对象是常量,不能通过p来修改该对象的值,同时p本身也不能重新指向其他int对象。 需要注意的是,在这些情况下,const修饰符可以放在*之前或之后,效果是相同的。例如,const int* p和int const* p都表示指向常量的非常量指针。而int* const p表示指向非常量的常量指针总结起来,指针const修饰符的组合可以用于灵活地控制指针和所指向对象的可修改性和常量性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值