常量指针和指针常量
#C
2024-09-03
1 |
|
指针是用来存储地址的,我们用指针 p 指向一个变量 i ,即存储该变量的地址。其中 & 意味着取地址符,* 意味着解引用。所以,当我们想要获取变量 i 存储的实际数据,可以选择直接输出 变量 i ,或者选择 *p 解引用来获取变量 i 存储的实际数据。两个的区别就是,变量 i 直接访问到内存,而 *p 需要先读取到 指针 p 指向的内存,然后再访问内存。因此,我们讲 变量 i 是直接访问,指针 p 是间接访问。
你要知道 p 等价于 变量 i 的内存地址,*p 就等于于 i。
此刻的指针 p 对指向的内存有读和写的权限,即读取指向内存的数据和修改指向内存的数据。
1 |
|
输出结果:
1 |
|
常量指针
1 |
|
从左往右看,常量(const)+ 指针(*)。
从报错情况来看,*p 对于指向内存的数据有读的权限,但是没有写的权限。p对于指向内存的数据有读的权限,也有写的权限。即常量指针能改变所指的对象,但是不可以改变所指对象的数据。
指针常量
1 |
|
从左往右看,指针(*)+ 常量(const)。
从报错情况来看,*p 对于指向内存的数据有读的权限,也有写的权限。p对于指向内存的数据有读的权限,但是没有写的权限。即常量指针不能改变所指的对象,但是可以改变所指对象的数据。
常量指针常量
const int* const 变量名。不必多说,既不能修改所指的对象,还不可以修改所指对象的数据。