前言
在了解什么是常量指针与指针常量之前,我们先了解一个关键字const,const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。被修饰的对象在定义后不能被修改。
#include<iostream>
using namespace std;
int main(void)
{
const int a = 7;
a = 8; //报错:表达式必须是可修改的左值
return 0;
}
而指针常量与常量指针就是用const对其常量或指针进行修饰使其不能更改。
普通指针
普通指针平时接触得较多,其指向的地址与地址中的值都可以被更改
#include<stdio.h>
int main()
{
int a = 4;
int b = 6;
int* c = &a;
printf("%d\n", *c); //4
*c = 5; //修改地址中的值
printf("%d\n", *c); //修改地址中的值后:5
c = &b; //修改指向的地址
printf("%d\n", *c); //修改指向的地址后:6
return 0;
}
常量指针
常量指针,用const修饰常量限定了常量的值,即指向的地址可以修改,但地址中的值不能修改
//修改指向的地址
#include<stdio.h>
int main()
{
int a = 4;
int b = 6;
const int* c = &a;
printf("改变前:%d\n", *c); //改变前:4
c = &b;
printf("改指向后:%d\n", *c); //改指向后:6
return 0;
}
//修改地址中的值
#include<stdio.h>
int main()
{
int a = 4;
int b = 6;
const int* c = &a;
printf("改变前:%d\n", *c);
c = &b;
printf("改指向后:%d\n", *c);
*c = 5; //报错:表达式必须是可修改的左值
printf("改指向的值后:%d\n", *c);
return 0;
}
指针常量
常量指针,用const修饰指针,限定了指针的值,即指向的地址不可以修改,始终指向一个地址,但地址中的值能修改
//修改指向的地址
#include<stdio.h>
int main()
{
int a = 4;
int b = 6;
int* const c = &a;
printf("改变前:%d\n", *c);
c = &b; //报错:表达式必须是可修改的左值
printf("改指向后:%d\n", *c);
return 0;
}
//修改地址中的值
#include<stdio.h>
int main()
{
int a = 4;
int* const b = &a;
printf("改变前:%d\n", *b); //改变前:4
*b = 5;
pintf("改指向地址的值后:%d\n", *b); //改指向地址的值后:5
return 0;
}
总结:
判断是普通指针、常量指针和指针常量,就是看是否加const和const加在哪里,const离谁近,就修饰谁,谁的值就不能更改