const 是C语言的新的特性,很多库函数strcpy等的实现都有使用。
1. const 修饰普通变量(char, int等)
E.G : const char c;
表示变量c是常量
2. const修饰一维指针
E.G: const char *p; // 表示p指向的内容不可以, 但p可变
char const *p; // 同上
char * const p; // 表示p是常量, 其指向的内容可变
const的结合原则: const 在 “*”号左侧, 修饰的指针p指向的内容, 否则修饰指针p
3. const 修饰二维指针
E.G: const char **p;
可以拆分为[ const char * ] [ *p ], 故指针p指向(const char *)类型,即指向一个指向内容不变的指针
----------------------------------------------------------------------
const 指针赋值的问题:
<<C专家编程>>中有1.9节有提到,
我简单说一下理解: 左右两个操作数(指向)的数据类型是一致的,左操作数的限定符(限制的条件)多余或等于右操作数的限定符,
即左操作数约束条件更多
1. const char * 和 char *
E.G: const char *p; char *q;
p = q; // 正确。p,q都是char *类型的指针, p中多了限定符const
q = p; // 错误。 q的限制约束小于p
2. const char ** 和 char **
E.G: const char **p; char **q;
p = q; // 错误
q = p; // 错误
const char **p 可以根据const的结合原则拆分为: [ const char * ] *p, 指针p指向类型[ const char *p ]
char **q 可以拆分为: [ char * ] *q, 指针q指向类型[ char * ]
指针p和q均没有限定符。
因为左右操作数指向的类型是不一致, 故赋值会出现问题。
同理: C++的引用, const char &, const char * &, 即引用和指针引用,和c语言的 const char * , const char **对应, 也会出现同样的问题
C++的指针赋值只要出现不兼容(除void *), 会直接报错, 所以正确的使用const在C++中也很重要, 防止出错了,不能理解错误的原因。

2860

被折叠的 条评论
为什么被折叠?



