要使指针的赋值合法需要满足:1.两个操作数都是指向有限定符或无限定符的相容类型的指针2.左边的指针所指向的
类型必须具有右边指针所指向类型的全部限定符
翻译过来就是类型相同,并且右边有的限定符左边也要有
char * cp;
const char * ccp;
ccp = cp;
因为,
左操作数是一个指向有const限定符的char的指针
右操作数是一个指向没有限定符的char的指针
char 与char相容,左操作数所指向的类型具有右操作数所指向类型的限定符(无),在加上自身的限定符(const)
而 如果试图使 cp = ccp 便会有编译错误
想一想如果这样都可以,那么便可以通过修改cp的内容来改变常量指针cpp的值得内容了
const char ** 于 char ** 是不相容的(imcompatible)
因为都是没有限定符的指针类型
因为const char * 类型并不是有一个限定符的类型,它是一个具有const限定符的char类型的指针
同样char *也没有限定符的类型,它是一个char类型的指针
cosnt char * 类型并不等同于 char * 类型,所以const char ** 于 char ** 是不相容的(imcompatible)
在一个符号前加上const限定符只是表示这个符号不能被赋值,const并不能把这个变量变成常量
int a[] = {1,2,3,4,5,6,};
#define TOTAL (sizeof(a) / sizeof(a[0]))
int main()
{
int d = -1;
if(d <= TOTAL - 1)cout << "-1 <= 5";
else cout << " -1 > 5 ?1 ";
}
sizeof会返回一个unsigned数,signed int 和 unsigned int比较,会把signed int 转化为 unsigned int -1转化为无符号数将是一个非常大的正整数