【发布时间】:2015-02-19 17:44:50
【问题描述】:
将 const 与指针一起使用可以使指针对象无法通过使用相关指针取消引用来修改。但是为什么我也不能修改指针不直接指向的东西呢?
例如:
int a = 3;
const int* ptr = &a;
*ptr = 5;
不会编译。但是为什么
*(ptr + 2) = 5;
也不编译?我不会更改指针指向的内容。
所以我们必须说,以这种方式将 const 与指针一起使用不仅使指针指向的内容不可修改(通过取消引用指针),而且还有什么,我们使用指针得到的地址是什么?
我知道在示例中我试图访问未分配的内存,但这只是为了讨论。
【问题讨论】:
-
那么您是否期望编译器假定只有第一个
sizeof(int)字节是const?更有意义的是,编译器将假定使用ptr访问的任何内存地址都是只读地址(“物理上”是只读的,或者至少在使用@987654326 的函数的“透视”中是只读的@)。