const char *、char const *、与char * const 三者的区别
2025-02-01
const int abe = 12; //不能改变abc的值
上面这种const比较简单,带*
的就比较复杂,下面我们来区分一下这几种写法。
const char * p;
先看下面这个范例:
char str[] = "I Love China!";
char * p;
p=str;
*p = 'Y';
p++; //p可以指向不同的位置,只要这些位置的内存归我们管理就可以。
下面我们把p的定义修改一下,
#include <iostream>
using namespace std;
int main()
{
char str[] = "I Love China!";
const char* p; //现在我们把p的定义修改一下,这样p指向的内容,不可以通过p来修改
p = str;
//*p = 'Y'; 现在这个语句就是错误的
str[0] = 'Y'; //还可以通过这种方式修改
p++;
return 0;
}
现在我们弄清了 const char * p
下面我们来介绍一下另外两种,一个是 char const * p,另外一个是char * const p
char const * p
char const * p 等同于 const char * p
这两种写法,const都是在*
的前面。
char * const p
最后是const 在*
的后面
#include <iostream>
using namespace std;
int main()
{
char str[] = "I Love China!";
char* const p = str; //定义的时候必须初始化
//p++; 这是不可以的,p指向一个内容后,不可以再指向其他内容,也就是说,p不可以指向不同的目标
*p = 'Y'; // 但是p指向的目标,这个目标的值,是可以改变的
//因此有人,把p成为指针常量(p指向的目标,不能改变,但是目标的值,可以改变)
return 0;
}