- 1. 地址
- 1.1 图文解析
- 1.2 测试代码
- 1.3 测试结果
- 2. 指针
- 2.1 图文解析
- 2.2 测试代码
- 2.3 测试结果
- 3. 指针链接
- 3.1 图文解析
- 3.2 测试代码
- 3.3 测试结果
- 4. 多级指针
- 4.1 图文解析
- 4.2 测试代码
- 4.2 测试结果
变量的地址,顾名思义,就是类似现实生活中每个人的地址,比如某个人的地址为
<河北省安阳市金山屯区宝山路32号真新六街坊>(随机生成的)
于是我们可以通过该地址找到具体的某个人,也可以通过该地址寄信件、发快递等等
1.2 测试代码而在C语言中,变量也同样像每个人一样,也有各自的地址,通过&来获取变量地址
#include1.3 测试结果 2. 指针 2.1 图文解析int main() { int x; printf("x的地址 = %x", &x); //输出十六进制地址值 return 0; }
2.2 测试代码通过上面我们已经了解了地址,但是我们如何通过根据地址来寻找变量呢,于是就有了指针,通过指针,我们就能找到具体的变量
同时指针本身也是一个变量,用于存储地址, 本身也有地址。
#include2.3 测试结果 3. 指针链接 3.1 图文解析#include int main() { int *p; // 为指针p分配可用的内存地址 p = (int *)malloc(sizeof(int)); printf("指针p的地址 = %xn", &p); printf("指针p的值 = %xn", p); printf("指针p所指向的地址中存储的值 = %dnn", *p); int x = 1; printf("x的值 = %dn", x); printf("x的地址 = %xnn", &x); p = &x; //将变量x的地址赋值给指针p printf("指针p的值 = %xn", p); printf("p指向的变量值 = %dnn", *p); return 0; }
3.2 测试代码既然指针也是一个变量,那么我们不就可以用指针存储另一个指针的地址吗
那么,套娃开始!
#include3.3 测试结果 4. 多级指针 4.1 图文解析#include int main() { int *p1, *p2; // 为指针变量分配可用的地址 p1 = (int *)malloc(sizeof(int)); p2 = (int *)malloc(sizeof(int)); printf("指针p1的地址 = %xn", &p1); printf("指针p1的值 = %xnn", p1); printf("指针p2的地址 = %xn", &p2); printf("指针p2的值 = %xnn", p2); int x = 1; printf("x的值 = %dn", x); printf("x的地址 = %xnn", &x); p1 = (int *)(&p2); p2 = &x; printf("p1(%x) = %x -> p2(%x) = %xn", &p1, p1, &p2, p2); printf("p1指向的变量值 = %xn", *p1); printf("p2指向的变量值 = %dn", *p2); return 0; }
4.2 测试代码而实际上为了更方便地使用套娃指针,我们可以用 **p, ***p, ****p, *****p… 这种方式来定义一个多级指针。
#include4.2 测试结果#include int main() { int **p, *q; p = (int **)malloc(sizeof(int*)); q = (int *)malloc(sizeof(int)); printf("指针p的地址 = %xn", &p); printf("指针p的值 = %xn", p); printf("指针*p的值 = %xnn", *p); printf("指针q的地址 = %xn", &q); printf("指针q的值 = %xnn", q); int x = 1; printf("x的值 = %dn", x); printf("x的地址 = %xnn", &x); q = &x; p = &q; printf("p(%x) = %x -> *p(%x) = %xn", &p, p, &(*p), *p); printf("指针p最终指向的地址内容 = %dn", **p); return 0; }



