之前看了不少次指针常量和常量指针的区别,但是每过一段时间久忘记了。这次再次学习到,得记录一下了。接下来分别对其进行详细介绍。

1、常量指针:指向常量的指针,表示指针所指向的地址的内容是不可修改的,但指针自身可变。基本定义形式如下:

const char* test = "hello world"; //const位于*的左边

示例如下:

#include <iostream>
using namespace std;
void main(){
    char * t1 = "Hello";
    char * t2 = "World";
    const char* test;
    test = t1;
    cout<<test<<endl;
    test = t2;
    cout<<test<<endl;
}

运行正常。说明常量指针指向的对象(地址)是可变的。下面做一些改动。我们试试修改常量指针指向的地址的内容。示例如下:    

#include <iostream>
using namespace std;
void main(){
    char * t1 = "Hello";
    char * t2 = "World";
    const char* test;
    test = t1;
    cout<<test<<endl;
    test = t2;
    cout<<test<<endl;
    *test = "Test"; //报错:cannot convert from 'const char [5]' to 'const char'
}

编译程序时,最后一行报错:cannot convert from 'const char [5]' to 'const char'。说明常量指针指向地址的内容不能改变。


2、指针常量:指针自身是一个常量,表示指针自身不可变,但其指向的地址的内容是可以被修改的。基本定义形式如下:

char* const test = "hello world"; //const位于*的右边

示例如下:

#include <iostream>
using namespace std;
void main(){
    char * t1 = "Hello";
    char * t2 = "World";
    char* const test = t1;
    cout<<test<<endl;
    *test = 'T';
    cout<<test<<endl;
}

运行正常。说明指针常量指向的地址的内容可以修改。从"Hello",变为"T"。我们试一下,改变指针常量指向的对象。示例如下:

#include <iostream>
using namespace std;
void main(){
    char * t1 = "Hello";
    char * t2 = "World";
    char* const test = t1;
    cout<<test<<endl;
    *test = 'T';
    cout<<test<<endl;
    test = t2;; //报错:you cannot assign to a variable that is const
}

编译程序时,最后一行报错:you cannot assign to a variable that is const。说明指针常量指向的地址不能改变。