about const
const char *const chPoint代表它是一个常量数据的常量指针,访问权最低。这样的指针总是指向相同的内存地址,在这个内存地址里的数据不能用指针修改。
char *const chPoint 表示非常量数据的常量指针,这样的指针总是指向相同的内存地址,并且该地址的数据可以通过指针修改。
const char *chPoint 表示常量数据的非常量指针,指针被修改后可以指向任何适当类型的数据项,但是被指向的数据不能通过指针进行修改。
下面再详细分析
const char *const * keywords ;
const char *const keywords;
const char const * keywords;
const char const keywords;
#include <iostream> using namespace std; const char *const * keywords ; int main(void) { const char *const * keywords; const char * p = "Hello world!\n"; char *q ="Helle C++\n"; //这里写成char *p也没问题. keywords = &p; cout << p << *keywords; keywords = &q; cout <<q<<*keywords; /*以上两个输出都正常,说明keywords这个指针指向的地址可以改变. 若写成*keywords = p 或 *keywords都不行 楼上有很多说keywords指向的地址是常量地址,即keywords是常量指针,应该有些问题. 这段代码可以解释keywords应该说是一个指向常量数据的非常量二级指针. 可能有些啰嗦,总之,keywords指向的地址可以改变,但是指向的是常量数据,即它指向的地址中的数据是不能被改变的. */ return 0; }
关于 const char *const keywords:
#include <iostream> using namespace std; int main(void) { const char * p = "Hello world!\n"; const char *q ="Helle C++\n"; //这里写成char *p也没问题. const char *const keywords=p; /*这句话代表它是一个常量数据的常量指针,访问权最低。这样的指针总是指向相同的内存地址,在这个内存地址里的数据不能用指针修改 而且在声明时必须要同时进行初始化. 下面如果出现 keywords = q 很明显也是错的了 */ keywords = p; cout << p << *keywords; return 0; }
关于const char const * keywords;和 const char const keywords;
#include <iostream> using namespace std; int main(void) { const char const * keywords; /*二个const可以随便去掉一个, 和const char *keywords(char const *keywords)一个效果 表示指向常量数据的非常量指针 */ //还有const char const keywords; 和const char const *keywords 一样,有一个const是多余的. //写成const char key或者 char const key都可以 char const key = '2'; char *p = "Hello world!\n"; const char *q ="Helle C++\n"; keywords = p; //*keywords = 's'; //error,不能修改数据即使指向的是非const型的数据 cout << p << keywords; keywords = q; cout << q <<keywords; return 0; }