辐射4崔尼帝塔位置:关于C++常量CONST的一个简单问题

来源:百度文库 编辑:高校问答 时间:2024/04/29 21:52:54
由于const long是一个类型,因此也就很正常地有const long*,表示类型为const long的指针,因此按照类型匹配,有:const long *p = &b; p = &a; *p = 10;。这里p = &a;按照类型匹配很正常,而p是常量的long类型的指针,没有任何问题。但是*p = 10;将报错,因为*p将p的数字直接转换成地址类型,也就成了常量的long类型的地址类型,因此对它进行写入操作错误。
注意有:const long* const p = &a; p = &a; *p = 10;,按照从左到右修饰的顺序,上面的p的类型为const long* const,是常量的long类型的指针的常量,表示p的地址所对应的内存的值不能被修改,因此后边的p = &a;将错误,违反const的意义。同样*p = 10;也错误。不过可以:
long a = 3, *const p = &a; p = &a; *p = 10;
上面的p的类型为long* const,为long类型的常量,因此其必须被初始化。后续的p = &a;将报错,因为p是long* const,但*p = 10;却没有任何问题,因为将long*转成long后没有任何问题。所以也有:
const long a = 0; const long* const p = &a; const long* const *pp = &p;
只要按照从左到右的修饰顺序,而所有的const修饰均由于取内容操作符“*”的转换而变成相应类型中指针类型修饰符“*”左边的类型,因此*pp的类型是const long* const,*p的类型是const long。

问题:
*p = 10 这个10是地址类型的数字还是指针类型的数字,也是是变量P存储的是记录10这个数字的内存地址,还是P记录的这个内存地址是10

*p = 10 是将p所指向的内存所保存的内容赋成10 是整形数