指针、常量指针、指针常量以及const、volatile修饰符

1.指针、常量指针、指针常量

常规指针:int *p,指针的值可变,指针指向的内容也可变;
常量指针:const int *p,表示指向常量的指针,指针的值可变,指针指向的内容不可变;
指针常量:int *const p,表示指针本身就是个常量,指针的值不可变,指针指向的内容可变,程序中用于防止某个指针由于主动或被动乱指;

总结:程序中要尽量多用const,以增加程序的健壮性。

2.修饰符(const、volatile)

这两个修饰符的含义就不多说了,这里要说的有两点:
1.定义变量时,修饰符在类型的前面和后面是一样的,如:

const int a;
int const a;

volatile int a;
int volatile a;

2.同时用这两个修饰符定义一个变量是有意义的,如:

volatile const int a;

有人可能会觉得在const前面加volatile无意义,因为const已经表示只读了(不可改写),为什么还要加上个易变的的标识,但实际上并非如此,因为const只是表示程序员不可修改,并不表示他不会被系统修改或者意外修改,**遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问,阻止编译器调整操作volatile变量的指令顺序。当要求使用volatile声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。**该修饰符组合用于修饰一些特别重要的只读变量。

3.结束语

程序中要多用const,以增加程序的健壮性,**如函数的传递参数中如果有指针则全部加上const,以防止函数中对传入的指针的值或指针指向的内容作改变,若传入的指针是为了获取一段数据的(在函数中对指针赋值)则对指针指向的内容加const(const void p)(当然也有一种情况是传入之后需要进去装载值的,如把一个数组传进去赋值,这种情况不能对指向的内容加const,而是应该对指向的地址加);若传入的指针是为了传递一段数据的,则对指针指向的内容和地址都加const(const void const p)。总之就是内容可不变的就给内容加,指向的地址可不变的就对地址加,都可不变的就都加。

参考文章:https://blog.csdn.net/weixin_42271802/article/details/105973024
原文更精彩

你可能感兴趣的:(c++,开发语言)