对于初学者来说,指针是C++学习中不可或缺的重要部分。理解常量指针和指针常量的定义及其区别,是大型互联网企业面试中的常见考点。接下来,我将用最简单明了的方式来解释常量指针和指针常量之间的不同之处。
1.常量指针
常量指针,用大白话翻译一下就是指向常量的指针。常量我们都明白,就是指在程序运行过程中其值不会发生改变的量,那么指针指向常量就说明指针所指向的内容不能被修改,但是指针本身的值(即它所指向的内存地址)是可以改变的。说到这里,可能大家还一头雾水,别慌,我举个例子大家肯定就能明白(PS:一定要看注释!):
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main(void) {
const int a1 = 11; //const功能是声明常量,这行代码的作用是定义一个int类型的常量a1,并将11复制给它
const int* p = &a1; //定义一个常量指针p,p用刚刚的大白话就可以理解为指向常量a1的指针
*p = 12; //系统报错,因为常量指针p指向的是常量,数值为11,不能再次修改为12
const int a2 = 12; //重新定义一个常量a2
p = &a2; //系统不报错,p可以指向另一个新的常量a2
}
大家可以复制我的代码放到自己的项目中研究一下,毕竟只有自己亲自动手去做了才能算是真正的理解。
总结: 常量指针,其实就是定义了一个指针,不过它指向的是常量,因此指针所指向的内容不能被修改,但是指向的内存地址可以被改变。
2.指针常量(const指针)
指针常量,用大白话翻译一下就是指针是一个常量。常量刚刚已经介绍,指针是一个常量也就意味着指针指向的内存地址不能改变,但是可以改变指针所指向的值。说到这里,聪明的是可能已经发现,指针常量与常量指针的定义和用法正好相反,指针常量能改变的常量指针不能变,常量指针能改变的指针常量不能变。举个例子:
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main(void) {
int a1 = 11; //定义一个变量a1,注意,这里不能再定义为一个常量
int* const p = &a1; //定义一个指针常量p,刚刚的大白话就可以理解为指针p是一个常量,一旦赋予初始值,指向的内存地址将不能再改变
*p = 12; //系统不会报错,因为指针常量可以改变指针所指向的值
int a2 = 12; //重新定义一个变量a2
p = &a2; //报错,指针常量p指向的内存地址不能改变,必须为&a1
}
总结: 指针常量,其实就是定义了一个指针,该指针是一个常量,因此指针指向的内存地址不能改变,但是指向的内容可以被修改。
好了,今天的干货就分享到这里,有什么我没有表达清楚的地方欢迎大家提出,我会认真回答大家的所有问题,我们一起学习一起进步!