const使用,指针常量与常量指针
文章目录
- 一、const 是什么?
- 二、指针常量
- 三、常量指针
- 四、指向常量的指针常量
- 二者分辨
强烈推荐同勉共进大佬的博客,关于指针常量和常量指针讲的真好!
理清C++常量指针和指针常量这团乱麻
一、const 是什么?
const 可以翻译成“常量”,即不可被改变的量。通常用于修饰变量让其内容在初始化后都不可以改变它,相当于 read-only(只读)。用它的目的是用语法的行为保护变量的值不被意外的修改。
全局变量加 const,其会被创建在常量区;而局部变量加 const 只能做语法级的初步检测,但是绕过变量名的访问就出现了矛盾。
const 在指针变量的修饰方面可以存在于两个位置的修饰,即指针常量和常量指针。
二、指针常量
更确切的来说应该是指向变量的指针常量
该指针指向一个常量,常量的值不可变,不可以通过该指针修改其值,但是该指针可以指向其他常量。(指针地址可以变,值不能变)
避免指针不能指向其它的变量,格式为:int* const p = &a
三、常量指针
更确切的来说应该是指向常量的指针变量
指针本身是常量。该指针只能指向某个常量,不可再指向其他常量。(指针地址不可变,值可变。注:指针常量在定义时要赋初值。)
所谓“指向常量”只是这个指针的“一厢情愿”,只是一种效果上的等价。事实上,const int *p=&a;a既可以是常量(const int a=10;)又可以是变量(int a=10;),但p一厢情愿地认为它所指的就是一个常量,所以它不允许通过自己来修改所指,这就造成一种效果上的等价——从p的角度看,它所指的“的确”是常量。所以,对“指向常量的指针”的最佳理解应为:我们不能通过该指针修改它所指向的东西(常量或者变量)。
避免指针不可修改其内容。格式为:int const* p = &a;(放在 int 前也可以(const int *p = &a;))
四、指向常量的指针常量
没啥说的,格式:const int* const p
二者分辨
区分:从右往左读。或者先找到*,然后看*的两边,右边是对指针p本身的限定,左边是对p所指向的东西的限定。
引用是一个指向不可变的、被编译器自动解引用的指针,即,引用是一个被编译器自动解引用的“本身是常量的指针”。