typedef char * pchar;
const pchar p = "Hello!";
p的类型是什么?如果你以为是 const char * 类型,那你就错了!
p的真正类型是 char * const,也就是说,const pchar p 与 char * const p 是等价的。
typedef不是像宏那样纯粹文字代换,它有解释语义的功能。让我们来看一个简单例子:
const int i = 5 表明 i 是一个常量,同理可得,const pchar p = "Hello!" 中的p也是一个常量,也就是说编译器把pchar作为一个数据类型,而不管它内部是否包含指针。
const pchar p和const int i本质上没有区别,都是对变量进行只读限制,只不过此处变量p的数据类型是我们自己定义的而不是系统固有类型而已。因此,const pchar p的含义是:限定数据类型为char *的变量p为只读。
这样可以获得语义的一致性,例如当用户进行如下声明时会得到相同的结果:
const pchar p 等价于 pchar const p
const int i 等价于 int const i
而宏则不然:
#define pchar char *;
const pchar p 不等价于 pchar const p
记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身是常量,而不是对象。
typedef const char * cpstr;
const使用的基本形式:const char m; 限定m不可变。
const char *pm; 限定*pm不可变,pm是可变的。
const pchar p = "Hello!";
p的类型是什么?如果你以为是 const char * 类型,那你就错了!
p的真正类型是 char * const,也就是说,const pchar p 与 char * const p 是等价的。
typedef不是像宏那样纯粹文字代换,它有解释语义的功能。让我们来看一个简单例子:
const int i = 5 表明 i 是一个常量,同理可得,const pchar p = "Hello!" 中的p也是一个常量,也就是说编译器把pchar作为一个数据类型,而不管它内部是否包含指针。
const pchar p和const int i本质上没有区别,都是对变量进行只读限制,只不过此处变量p的数据类型是我们自己定义的而不是系统固有类型而已。因此,const pchar p的含义是:限定数据类型为char *的变量p为只读。
这样可以获得语义的一致性,例如当用户进行如下声明时会得到相同的结果:
const pchar p 等价于 pchar const p
const int i 等价于 int const i
而宏则不然:
#define pchar char *;
const pchar p 不等价于 pchar const p
记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身是常量,而不是对象。
typedef const char * cpstr;
const使用的基本形式:const char m; 限定m不可变。
const char *pm; 限定*pm不可变,pm是可变的。