3.2指针到底是什么
- 普通变量
当不涉及强制转换的时候,某种类型的数据必须存放到对应的变量中。 - 指针变量
当不涉及指针强制转换的时候,某个类型地址必须放到对应类型的指针变量中。
指针变量和普通变量一样,都是用于存放数据的。
只是指针变量存放的数据很特殊,是内存地址。
- 举例
int a = 10;
int *p = &a;/*针变量p里面存放的地址指向空间a*/
p中只存放了a首字节地址,但是int说明了*p希望访问的空间有4个字节
- 变量空间的首字节地址,作为整个空间的地址
指针变量的类型作用
普通变量:
- 程序员写代码时识别用
- 空间大小的说明
- 存储结构说明
指针变量:
- 某类型一级指针变量 = 该类型一级地址
- 某类型二级指针变量 = &(某类型一级指针变量)
所有普通变量的地址都是一级地址
所有一级指针变量的地址都是二级地址
过高级数的指针变量没有太大意义
指针使用之三部曲
- 定义(声明)
int *p = null; //初始化一下,防止野指针
- 关联
int a = 10;
p = &a; //a空间的首地址给了p,所以p里面的地址常量指向了a空间
- 引用
读空间:读值操作,前提是里面存有数据才行。
int b = *p; //等价于b = a
写空间:向空间写入新的值
*P = 30; //等价于a = 30
理解指针符号
星号*的理解
- 用在指针定义的时候,与前面的类型结合,用于表示被定义指针变量的类型
int *p;
int* p;
星号靠前靠后都没关系
这时的*和p是两个不同的东西
*的个数表示指针变量的级数
- 解引用
int *p = &a;
*p = 10; //等价于a = 10
解引用时,*p表示p所指向的空间
这时的*p是一个整体
用于读空间和写空间。