学习笔记
《深入理解C指针》
http://www.ituring.com.cn/book/1147
1.4.2 常量与指针
0. 普通指针 :指向 变量 的指针
- 可以修改指针,使其指向不同的地址
- 可以通过指针修改此时指向的数据
1. 指向 常量 的指针
- 两种等价写法
const int * pci;
int const * pci; -
不可以 通过
pci来修改指向的数据 -
可以 使
pci指向其他地址 -
pci可以指向变量,就是不能通过pci来修改这个变量,可以直接修改这个变量
2. 指向 非常量 的 常量指针
int num;
int * const cpi = #
-
cpi永远指向num,即cpi里面永远存着num的内存地址(cpi的值不能改); -
num必须是变量,里面存的数据可以变化,即可以通过cpi来修改num的值
int * const cpi = & num ;
#include <stdio.h>
int main()
{
int num = 10;
int* const cpi = #
printf("num = %d , *cpi = %d\n", num, *cpi);
printf("After num = 77\n");
num = 77; // 可以直接修改num的值
printf("num = %d , *cpi = %d\n", num, *cpi);
printf("After *cpi = 88\n");
*cpi = 88; // 可以通过cpi来修改num的值
printf("num = %d , *cpi = %d\n", num, *cpi);
return 0;
}
- 看看怎么提示?
Case2 表达式必须是可修改的左值?
首先,是因为cpi已经指向了num并且声明为常量指针,就只能一直指向num,而不能指向新的age;
其次,这个提示语是从age的角度出发, 它提示你说age需要一个新的指针来配合自己,而不能拿已经指向num的cpi了。
3. 指向 常量 的 常量指针
int num;
const int * const cpci = #
-
pci的值(即指向的地址)不能改 - 也不能通过
pci来修改所指向的数据
4. 指向 “ 指向 常量 的 常量指针” 的 指针
const int limit;
const int * const cpci = &limit;
const int * const * pcpci;
pcpci = &cpci;
-
(const int * const * ) pcpci;
指针变量名是pcpci -
(const int * const) * pcpci;
指针指向的数据类型是const int * const(这是Case3 指向常量的常量指针)
参考资料
- 什么叫指针自己所在内存地址?指针存的地址?指针存的地址指向的数据?
[C指针]&pipi*pi
https://www.jianshu.com/p/1e05611fb60c









网友评论