#includeint main() { char array[] = {1, 2, 3}; char* p1 = &array[0]; // int* p1 = array printf("p1=%pn", p1); // p1=000000000061FDF5 printf("array+1=%p &array+1=%pn", array+1, &array+1); // array+1=000000000061FDF6 &array+1=000000000061FDF8 const char* p2 = &array[1]; // *p2 = *p2 + 1; // error: assignment of read-only location '*p2' p2 = &array[2]; // OK char* const p3 = &array[1]; *p3 = *p3 + 1; // OK // p3 = &array[2]; // error: assignment of read-only variable 'p3' const char* const p4 = &array[1]; // *p4 = *p4 + 1; // error: assignment of read-only location '*p4' // p4 = &array[2]; // error: assignment of read-only location '*p4' }
前者,const 限制 *p2 内容;后者 const 限制 p3 的内容。
C 和 C++ 中 const 用法很相似,但是并不是完全相同,
- 区别之一:C++ 允许在声明数组大小时候使用 const 参数,而 C 不允许。
- 区别之二:C++ 指针使用更加严格。
const int y; const int * p2 = &y; int * p1; p1 = p2; // C++不允许这样做,但是C可能只是给出警告



