const修饰指针+volatile +restrict

const这块的难点

const修饰指针有以下的几种形式 ,不同的形式 它的意义不一样。

形式1:

int a=23;

const int *p=&a; a是int型,&a是int *型的,要把int *型的赋给 const int *型的。涉及到了点类型转换。

问 const int *p=&a;这个操作,导致了谁不能被操纵了?!

这里修饰的是 *p,所以 *p 如果重新赋值是不可以的!!

const修饰指针+volatile +restrict

*p不能变,但是p是可以变的。

const修饰指针+volatile +restrict

第二种:

int const * p 这种情况和 const int *p 是一模一样的,都是修饰 *p。

第三种:

int * const p;结果是 *p可以变,p不能变。

const修饰指针+volatile +restrict

还是比较容易理解的:

就看const修饰的是谁,const如果在*p的前面,修饰的就是*p,*p就是常量了,就不能变(也就是不能通过*p重新赋值)。

const如果放在* 和 p中间了, * const p,修饰的就是p,p就是常量了,就不能重新赋值了。

第四种:

如果既想让*p不能变,又想让 p不能变,如何写??!!

让他俩都被修饰——const int * const p(第一个const修饰了*p,第二个const修饰了p),这时,*p不能变,p也不能变。

const修饰指针+volatile +restrict

const修饰指针+volatile +restrict

volatile (是对存储位置的优化)

const修饰指针+volatile +restrict

restrict(对代码量的优化)

const修饰指针+volatile +restrict

上一篇:烂泥:使KVM显示VM的IP地址及主机名


下一篇:redis集群遇到的坑