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;
}

浙公网安备 33010602011771号