怡悦编程欢迎您!

怡悦编程欢迎您!

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