1,当用字符串字面值初始化数组时
Char array[5] = “hello”; //error
由于字符串字面值总是包含一个空字符(null)来表示字符串的结束,故此处数组的维度应该为6。
2,指针的引入
建议:尽量避免使用指针和数组 指针和数组容易产生不可预料的错误。其中一部分是概念上的问题:指针用于低级操作,容易然生与繁琐细节相关的(book keeping)错误。其他错误则源于使用指针的语法规则,特别是声明指针语法。 许多有用的程序都可不使用数组或指针实现,现代C++程序采用vector类型和迭代器取代一般的数组、采用string类型取代C风格字符串。
3,指针和 typedef
在 typedef(第 2.6 节)中使用指针往往会带来意外的结果。下面是一个
几乎所有人刚开始时都会答错的问题。假设给出以下语句:
typedef string *pstring;
const pstring cstr;
请问 cstr 变量是什么类型?简单的回答是 const pstring 类型的指针。
进一步问:const pstring 指针所表示的真实类型是什么?很多人都认为真正的类型是:
const string *cstr; // wrong interpretation of const pstring
cstr
也就是说,const pstring 是一种指针,指向 string 类型的 const 对象,但这是错误的。
错误的原因在于将 typedef 当做文本扩展了。声明 const pstring 时,const 修饰的是 pstring 的类型,这是一个指针。因此,该声明语句应该是把cstr 定义为指向 string 类型对象的 const 指针,这个定义等价于:
// cstr is a const pointer to string
string *const cstr; // equivalent to const pstring cstr