之前看了不少次指针常量和常量指针的区别,但是每过一段时间久忘记了。这次再次学习到,得记录一下了。接下来分别对其进行详细介绍。
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。说明指针常量指向的地址不能改变。