C++语法难点(声明和定义,指针的引用,对常量的引用,指向常量的指针,常量指针)

变量声明和定义的关系

声明的存在允许把程序拆分成多个逻辑部分来编写,支持分离式编译。声明使得名字为程序所知,一个文件如果想使用别处定义的名字就必须包含对那个名字的声明,而定义负责创建与名字关联的实体。

声明一个变量,就在变量名前添加关键字extern,而且不要显式地初始化变量。

extern int i;  // 声明 i 而非定义 i
int j;         // 定义 j

任何包含了显式初始化的声明即成为定义,这么做会抵消 extern 的作用。

extern double pi = 3.14;  // 定义

变量能且只能被定义一次,但是可以被多次声明。

指针的引用

引用本身不是一个对象,因此不能定义指向引用的指针。但是指针是对象,所以存在对指针的引用。

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

r = &i;			// r引用了一个指针,因此给r赋值就是令p指向i
*r = 0;			// 解引用r得到i,也就是p指向的对象,将i赋值为0

对常量的引用

与普通引用不同的是,对常量的引用不能用作修改它所绑定的对象。

const int ci = 1024;
const int &r1 = ci;     // 正确:引用及其对应的对象都是常量
r1 = 42;                // 错误:r1是对常量的引用
int &r2 = ci;           // 错误:试图让一个非常量引用指向一个常量对象

因为不允许直接对ci赋值,当然也就不能通过引用去改变ci。因此对r2的初始化是错误的。假设该初始化合法,则可以通过r2来改变他引用对象的值,这显然是不正确的。

指向常量的指针

指向常量的指针不能用于改变其所指对象的值,要想存放常量对象的地址只能使用指向常量的指针。

const double pi = 3.14;     // pi是个常量,它的值不能改变
double *ptr = π          // 错误:ptr是一个普通指针
const double *cptr = π   // 正确:cptr可以指向一个双精度常量
*cptr = 42;                 // 错误:不能给*cptr赋值

允许一个指向常量的指针指向一个非常量对象,但是不能通过指向常量的指针修改常量对象的值。

double dval = 3.14;
cptr = &dval;

常量指针

常量指针,把指针本身定义为常量。常量指针必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中的那个地址)就不能再改变了。

int errNumb = 0;
int *const curErr = &errNumb;   // curErr将一直指向errNumb
const double pi = 3.14;
const double *const pip = π  // pip是一个指向常量对象的常量指针

常量指针的作用类似于数组名,都是存放一个地址,但是本身的值不可改变。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值