const char * 和 char const * 是一样的,故只用分析
const char * 和 char * const
const char *p1
*p1 为常量,不能修改
p1 可以修改,p1指针可以指向不同的位置,如pTp
总结:p1指向pTp,pTp可以改内容。
指向---字符常量---的指针
,ptr是一个指向 char* 类型的常量,指向可以改,但不能修改ptr指向的内容。
void test_xhh_04(){
char tp1[] = "xhh";
char tp2[] = "mcy";
char const *p1 = tp1;
cout << "address &p1 = " << &p1 << " | value *p1 = " << *p1 << endl;
// *p1 = 'y'; // [1] *p1不能变,即值不能变
tp1[0] = 'z'; // [2] 指向的内容,其可以进行修改
cout << "address &p1 = " << &p1 << " | value *p1 = " << *p1 << endl;
p1 = tp2; // [3] 可以修改指针p1的指向
cout << "address &p1 = " << &p1 << " | value *p1 = " << *p1 << endl;
cout << "address &p1 = " << &p1 << " | value *p1 = " << *(p1+1) << endl;
cout << "address &p1 = " << &p1 << " | value *p1 = " << *(p1+2) << endl;
}
----------------------------------------------------------------------------
address &p1 = 0x61fdb8 | value *p1 = x
address &p1 = 0x61fdb8 | value *p1 = z
address &p1 = 0x61fdb8 | value *p1 = m
address &p1 = 0x61fdb8 | value *p1 = c
address &p1 = 0x61fdb8 | value *p1 = y
char * const p1
指针p1的指向不能修改
指向字符的-----指针常数
,即const指针,不能修改ptr指针,但是可以修改该指针指向的内容。
void test_xhh_05(){
char tp1[] = "xhh";
char tp2[] = "mcy";
char* const p1 = tp1;
cout << "address &p1 = " << &p1 << " | value *p1 = " << *p1 << endl;
tp1[0] = 'z'; // [1] 可以修改指向的值
cout << "address &p1 = " << &p1 << " | value *p1 = " << *p1 << endl;
// p1 = tp2; // [2] 不可以修改指针的指向
}
----------------------------------------------------------------------------
address &p1 = 0x61fdb8 | value *p1 = x
address &p1 = 0x61fdb8 | value *p1 = z