c语言基础笔记DAY5
1.内存
- 每启动一个程序,系统在内存上给该程序分配32位内存空间 4G
- 内存是由一个一个字节组成,每个字节都会有地址编号
- 32位系统,内存地址由0x 0000 0000 ~ 0xffff ffff
- 注意 : 这里的内存地址是逻辑地址空间,虚拟地址. 实际硬件上,虚拟地址会映射到物理内存
2.内存的编号
- 地址:内存的编号
- 我们把这个编号(地址)也叫做指针
3.指针大小
- 不管什么类型的指针,大小只和编译器有关(32位,64位)
- 32位编译器,指针大小都为四个字节
4.const指针
代码
int a = 100;
int b = 200;
const int * p = &a;
//*p = 20; 不能通过*p修改a的值
int * const q = &a;
q = &b; //不能改变q的指向
const int * const x = &b; //不能改变x指向,不能改变*x值
5.指针的加减
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z6hWED9B-1606271251944)(C:\Users\zhaoq\AppData\Roaming\Typora\typora-user-images\image-20201123144330290.png)]
可转为: int * q = &a[9]
注意 : 指针相加没有意义
6.指针步长
- 指针步长与 指向 的类型有关
int * p = NULL; //p的步长为:sizeof(int)
int **q = &p; //q的步长为:sizeof(int*)
int (*x)[10]; //x为 指向元素个数为10的int型数组的指针
int *y[10]; //y为数组的名称,该数组存放了10个int型指针
int**z = y; //z = &y[0] z+1 = &y[1]
*(z+1) = p;