C++程序设计(面向对象进阶)崔毅东 ——第3单元第05节——常量与指针

常量 (Constant)

1. 常量

常量是程序中一块数据,这个数据一旦声明后就不能被修改了。

如果这块数据有一个名字,这个名字叫做命名常量;比如 const int A = 42; 其中A就是命名常量;
如果这块数据(这个常量)从字面上看就能知道它的值,那它叫做“字面常量”,比如上面例子中的“42”就是字面常量

2. 编码规范

  1. Named constants (including enumeration values) must be all uppercase using underscore to separate words.

  2. 符号常量(包括枚举值)必须全部大写并用下划线分隔单词

例如:MAX_ITERATIONS, COLOR_RED, PI

常量和指针(Constant and Pointer)

常量和指针搅合在一起,成为一个比较麻烦的问题。就像你想分清楚“己巳已”不容易一样,想搞清楚“指针常量”、“常量指针”、“常量指针常量”这种拗口的东西,总得花点心思。

问题还不是记性好不好,因为指针和常量搅合在一起,还涉及到函数传参、C风格数组、字符串常量这些应用场景,就更得仔细一些。所以,你应该仔细看看代码示例的演示视频。

1. 指针

指针是一个地址,它长得像 0x8FFF 这个样子。地址呢,就是某个内存位置的一个编号。那这个位置的内存是可以存放一些数据的。这些数据就叫做“指针所指的数据”或者“指针指向的数据”

2. 常量和指针

我们把指针放到一个变量里面,就是指针变量;

我们把指针放到常量中,就是指针常量;

那如果一个指针(也就是地址,比如0x8FFF)所指的数据(也就是0x8FFF这个内存位置存放的数据)是常量,这个指针被称为常量指针。

所以,有一种东西,叫做“常量指针常量”。就是说,一个常量中存着一个指针,这个指针又指向另外一个常量。

3. Pointer to Constant (常量指针/常指针)

特征:指针所指向的内容不可以通过指针的间接引用(*p)来改变。

const int x = 1;

const int* p1;

p1 = &x; //指针 p1的类型是 (const int*)

*p1 = 10; // Error!

char* s1 = “Hello”; // Error!

const char* s2 = “Hello”; // Correct!

4. Pointer Constant (指针常量)

“指针常量”的含义是:指针本身的内容是个常量,不可以改变

int x = 1, y = 1;

int* const p2 = &x; //常量 p2的类型是 (int*)

*p2 = 10; // Okay! à x=10

p2 = &y; // Error! p2 is a constant

5. 指针和常量的总结

const int * x

int * const y

在前先读,在前不变

  • (指针)和 const(常量) 谁在前先读谁 ;* 代表被指的数据,名字代表指针地址

const在谁前面谁就不允许改变。

Usage of using, typedef, and #define (using, typedef, and #define的用法)

1. using 声明新的类型名称

当我们声明这样一些变量时:

const unsigned long int * p;

const unsigned long int * q;

const unsigned long int * r;

我们会觉得很麻烦。

那有没有一种办法使得 p, q, r的类型声明简便一点呢?

我们在C语言里面学了 typedef,它可以声明一个新的类型名。

typedef const unsigned long int * MyPointer;

MyPointer p;

C++11中为 using 关键字赋予了一个类型声明的新功能

using ConstPointer = const unsigned long int *;

ConstPointer p;

ConstPointer q;

ConstPointer r;

using的写法比typedef的写法更加直观,所以,我们应尽量使用using声明新类型名。而且当涉及到模版类型名时,只能使用using。

2. 编码规范

  1. Names representing types must be in mixed case starting with upper case.

  2. 代表类型的名字必须首字母大写并且其它字母大小写混合

例如:Line, SavingsAccount

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值