C++Primer笔记--变量和基本类型

复合类型的声明

一条定义语句可能定义出不同类型的变量:
// i 是一个 int 型的数,p 是一个 int 型指针,r 是一个int 型引用
int i = 1024, *p = &i, &r = i;

错误观点:在定义语句中,类型修饰符(*或&)作用于本次定义的全部变量。造成这种错误看法的有个原因就是我们可以把空格写在类型修饰符和变量名中间:
int*  p;       //合法,但是容易产生误导

例如:
int* p1,P2;  //p1 是指向 int 的指针,p2 是int 型

*仅仅是修饰了 p1 而已,对该声明语句中的其他变量,它并不产生任何作用。下列声明才能声明2个指针
int *p1, *p2;    //p1 和 p2 都是指向 int 的指针

指向指针的引用

int i =42;
int *p;   
int *&r = p; //r 是一个对指针 p 的引用

要理解 r 的类型到底是什么,最简单的办法是从右向左阅读 r 的定义。离变量名最近的符号(此例中是 &r 的符号 &) 对变量的类型有哦最直接的影响,因此 r 是一个引用。


默认状态下,const对象仅在文件内有效

如果想在多个文件之间共享 const 对象,必须在变量的定义之前添加 extern 关键字。


指针和 const

指针的类型必须与其所指对象的类型一致,但是有2个例外。
第一种例外情况是允许令一个指向常量的指针指向一个非常量对象:
double davl = 3.14; //dval 是一个双精度浮点数,它的值可以改变
const  double *cptr = &dval; // 正确:但是不能通过 cptr 改变 dval 的值

常量指针:const 指针
把 * 放在 const 关键字之前用以说明指针是一个常量,这样的书写形式隐含着一辰意味,即不变的是指针本身的值而非指向的那个值。

指针和 constexpr

const int *p = nullptr; //指向整型常量的指针
constexpr int *q = nullptr;  //指向整数的常量指针

p 和 q 类型完全不同,其中的关键在于 constexpr 把它所定义的对象置为了顶层 const


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值