前言
我们经常会看到 const 和 指针 自由组合, const 在先 在后, 所产生的效果是不一样的. 经常会混淆概念, 在这里我们将他详细的区分一下, 什么是常量指针以及指针常量, 他们具体有什么特点, 让我们一起随着代码去验证!
读法: const (常量) 和 * (指针) 谁在前, 先读谁
常量指针
常量指针: 就是指向常量的指针, 指针指向的内容不能被改变, 但是地址可以被改变; 注意: 这里的内容不能被改变是不能被直接改变, 可以通过指向地址的改变而改变内容 声明格式: 特别注意, 有俩种声明形式均正确: const 类型 *指针常量名; 如: const int *p1; 类型 const *指针常量名; 如: int const *p1;
指针常量
指针常量: 就是指针的本身是常量, 指向的地址不可被改变, 内容可以被改变 这里我们会写实例来进行验证: 声明格式: 指针类型 * const 指针名; 如: int * const p2;
指向常量的常量指针
指向常量的常量指针, 指向的地址和指向的内容均不可被改变 声明格式: const 指针类型* const 指针名; 如: const int* const p;
验证源码
#include <stdio.h>
int main (int argc, char **argv)
{
int number1 = 3;
int number2 = 5;
const int *p1 = &number1;
int* const p2 = &number1;
const int* const p3 = &number1;
p1 = &number2;
p2 = &number2;
p3 = &number2;
*p1 = 4;
*p2 = 4;
*p3 = 4;
return 0;
}
运行结果
由此可见, 常量指针内容是不可以被改变的; 指针常量地址是不可以被改变的; 指向常量的常量指针, 内容和地址均不可被改变
|