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所指向的东西的限定。

引用是一个指向不可变的、被编译器自动解引用的指针,即,引用是一个被编译器自动解引用的“本身是常量的指针”。

你可能感兴趣的:(C与C++,c++,程序人生,学习,c语言)