int main()
{
    char array[] = {1, 2, 3};
    char* p1 = &array[0]; // int* p1 = array
    printf("p1=%p\n", p1); // p1=000000000061FDF5 
    printf("array+1=%p &array+1=%p\n", 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 const 和 C++ const
C 和 C++ 中 const 用法很相似,但是并不是完全相同,
- 区别之一:C++ 允许在声明数组大小时候使用 const 参数,而 C 不允许。
 - 区别之二:C++ 指针使用更加严格。
 
const int y;
const int * p2 = &y;
int * p1;
p1 = p2; // C++不允许这样做,但是C可能只是给出警告                
                










