const char *ptr和char const *ptr以及char* const ptr的区别

1.  const char *ptr 和 char const *ptr  => 这里这么理解,这个表示的是*ptr, 也就是指针指向的值,而修饰这个指针指向的值 (*ptr)的是const char或者char const, 表示两个意思:

const => 表示是个常量,也就是说*ptr这个指针指向的值是个常量

char => 表示字符类型, 也就是说这个指针指向的值是个字符类型的常量

所以,也就是 *ptr是const,不能修改 (也就是说不能通过指针ptr来修改它此时所指向的值*ptr),但是

1. 它并不代表ptr此时所指向的值就是一个常量,只是说此时*ptr不能改,也就是说不能通过指针ptr来改变它此时指向的值*ptr

2. 指针ptr的指向是可以改变的,也就是说我完全可以把指针ptr指向另一个值

eg:

 

#include <iostream>
using namespace std;
int main()
{
    char oldArray[] = "china";
    char newArray[] = "german";
    const char *ptr = old; //定义了一个指向字符常量的指针
    
    ptr[0] = 's'; // 这里试图通过指针ptr来修改它此时指向的值*ptr(china), 直接报错

    oldArray[0] = 't'; //这里没有问题,说明ptr此时所指向的值old数组,它本身并不是一个常量。也就说是此时ptr所指向的值并不是一个常量。但你不能通过ptr来修改它此时所指向的这个old数组
    
    ptr = newArray; //这里是没有问题的,重新对指针ptr进行赋值,现在指针ptr指向的是newArray,也就是说指针ptr的指向是可以改变的

}

 2. char* const ptr

定义一个指向字符的指针常数, 这里从写法可以看出: const ptr, 这个const用来修饰指针ptr本身,也就是说这是个const指针,也就是指针不能修改。什么意思呢,也就是说指针的指向不能修改,但是指针指向的内容,是可以改的

1. 这是个const指针,也就是说指针的指向不能修改

2. 指针指向的内容,可以通过指针来进行修改

#include <iostream>
using namespace std;
int main()
{
    char oldArray[] = "china";
    char newArray[] = "german";
    const char *ptr = old; //定义了一个指向字符常量的指针
    
    ptr[0] = 's'; // 这里通过指针ptr来修改它此时指向的值*ptr(china), 是完全没有问题的

    oldArray[0] = 't'; //这里没有问题
    
    ptr = newArray; //重新给指针赋值,也就是更改指针的指向,这里直接报错

}

 

posted on 2023-09-11 10:08  新西兰程序员  阅读(64)  评论(0编辑  收藏  举报