一文搞懂指针常量、常量指针、指向常量的指针有什么区别?

1.指针常量

int * const p;

先看const再看*,p是一个常量类型的指针,该指针的指向不可修改,但该指针指向的地址上存储的值可以修改

用C++之父的方法来记忆:p is a const pointer to int         p是一个常量指向整型

既然有指向作用,那么p就是指针,他的类型为常量类型,在该例中他指向整型。

常量类型不可修改,p还是一个常量指针,const限制住了p存储的值不可修改,也就是p的指向不可修改,但是在这个地址上的值是不受限制,可以修改的。

也可以用结合理论来理解,首先p与const结合,限制住了p不可修改;p又是一个指针,也就是说p的指向被限制住了,但是const的作用域也只是限制p,p所指向的值还是可以修改的。

2.常量指针

const int *p;
int const *p;

先看*再看const,定义一个指针,指向一个常量,不能通过指针来修改这个指针指向的值,但该指针的指向可以修改

p is a pointer to int const                                p是一个指针指向整型常量

p所指向的整型是常量类型,也就是说p所指向的值不可改变,但const也只是限制住了值不可修改,p的指向还是可以改变的。

3.指向常量的常量指针

const int * const p;

从名字可以看出:        值是常量,指向该常量的指针也是常量

对于指向常量的常量指针,两个const既限制住了p所指向的值,也限制住了p的指向,两者均不可修改。

4.总结

在以上的几种类型中,p均为指针,在指针的指向指针指向的值是否可变得问题上又衍生出了几种不同的情况:

指针常量的指向不可修改,但他所指向的值是可以修改的;

常量指针指向的值不可修改,但该指针的指向可以修改;

指向常量的指针常量被两个常量(const)限制住了,指针的指向和指针指向的值都不可修改。

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