字符数组除了可以用花括号在定义时初始化外,还可以用字符串字面值初始化,但谨记字符串字面值包含一个额外的空字符
char c1[]={'h','e','l','l','o'};
char c2[]="hello";
cout<<sizeof(c1)/sizeof(char)<<endl; //长度是5
cout<<sizeof(c2)/sizeof(char)<<endl; //长度是6
一个数组不能用另一个数组初始化,也不能将一个数组赋值给另一个数组
int a[3]={1,2,3};
int b[3][3]={{1,2,3},{1,2,3},{1,2,3}};//right
int c[3][3]={a,a,a}; //error
若指针保存0值,表明它不指向任何对象。但是把int型变量赋值给指针是非法的,尽管此int型变量的值可能为0
int a =0;
int*p1 =0; //right
int*p2 = a; //error
typedefstring*pstring;
const pstring cstr;
cstr的类型是 string * const 还是 const string * ?
答:是string *const cstr,而非 const string *cstr。容易产生误解的原因是const限定符既可以放在类型前也可以放在类型后,const pstring cstr等价于pstring const cstr。遇到此类问题时,把const放在类型之后来理解。区分:int *ip[4] 和 int (*ip)[4]第一个表示一个数组,元素是int指针第二个表示一个指针,指向int数组,遇到此类问题时,由内向外读。