C/C++指针与const的自我理解
一: 指针是一个类型: 指针类型 ; 指针并不是变量。
提要:
(1)
int a = 10;
const int*aPtr = &a;
首先,定义了指针类型的变量; 其次,int* aPtr;
指针类型的变量,其实是定义了两个变量。一个是指针类型的变量a, 一个是普通变量 *a
【注】那这么做的意义是什么呢?
答: 你可以使用这个变量,但你不能修改-----这就是const 和 指针 组合的意义。
(2)把 ‘*’ 读成 pointer to.
(3)把const和向后紧贴着的一个类型一起读
(4)const char 和 char const 没有区别(在定义变量时)
首先明确普通的数据类型:
int a = 10; 他代表了什么?
分配了一个内存,这个内存有个地址,(你如果想取这个地址可以用&),但是现在这个声明没有地址的事:
简而言之:
下面来看一下指针类型:
指针类型的变量,其值为:另一个变量的地址;
例如:
int *a;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201122162644504.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0p1bmlvckNoZXN0bnV0,size_16,color_FFFFFF,t_70#pic_center在我看来,定义指针就是定义一个地址;定义一个普通变量是定义一个内容。如果一个数据想要存在于内存之中,你还想完全控制这个数据:
(1)这个数据在哪里?地址(序号A)
(2)这个数据多大,占用多少字节?类型(序号B)
(3)这个数据的内容?10,用(序号C)
int* a; 可以读为:a 是一个指针类型的变量,a的值指向的是一个int型的变量。
二、 接下来说const:
const : constant : 不变的;等价于ReadOnly
作用:
1:保护你的设计
2:便于编译器优化你的代码
首先:cpnst 修饰变量:
const 可以修饰普通类型的变量;也可以修饰指针类型的变量。再次强调,指针是一种类型,不是变量。
例如:
普通类型
const int A = 10; 意思是:a 是一个常数了,对应C语言中的常数定义,#define A 10
int b = A ; 允许;
A = 1; 不允许
const int* a; 意思是:'a' is a pointer to const int
翻译给来就是: a 是一个指针,指向不可以修改的整型变量(或者指向只读的整型)
上面说了,定义指针类型时,其实同时定义了两个变量。
a: 指针类型的变量
*a: int 类型的。 ----- 不可以修改的整型变量:*a = 10 会出错。*a 只能作为右值。
如下图: 当const 与 指针 混合使用的时候,把 ‘*’ 读成 pointer to.
根据上图:
char * const cp; const cp is a point to char
分析: 两个变量,哪一个不变?? 一个cp, 一个*cp;
不变的指针变量 指向一个char 类型的变量。
you can get it,maybe.
再举个例子:
const char* const cp; 与 char const * const cp; 是一样的效果
首先,两个变量; 其次,没其次了,两个const,肯定都不能变。