本文主要是介绍指针进阶(多级指针),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0.多级指针命名
多级指针命名,最主要的是要知道该指针指向的是什么数据。
一.1级指针 - 指向一个变量
若定义一个变量 int a,那么 目标类型就为 int。
所以该指针应该定义为 int *p;
/* 目标 */
int a;/* 目标类型 *p */
int *p;/* 指向目标 */
p = a;
二.2级指针
若定义一个一级指针 int *p1,那么目标类型就为 int *
定义一个二级指针,使其指向 p1,该指针应该为 int * *p;
int a = 0;/* 目标 */
int *p1 = &a;/* 目标类型 *p */
int* *p2;/* 二级指针,存的是一级指针的地址 */
p2 = &p1;
三.二级指针与指针数组
p[] 里面存储了数组元素 a[0] 、a[1] 的地址;q 存储了数组元素 p[0] 的地址;
(1).数组 p[] 来表示 a[1] 的值
①.p[1] 存储了 a[1] 元素的地址;
②.对 p[1] 元素进行解引用,则得到 a[1] 的值;
(2).用指针 q 来表示 a[1] 的值
①.q 存储了 p[0] 的地址,所以第一步 *(p+1) 得到 p[1] 的值;
②. p[1] 存储了 a[1] 元素的地址,即 *(p+1) 表示 a[1] 的地址
③.对 *(p+1) 进行解引用 **(p+1) 得到 a[1] 的值
int a[] = {3,6,9};int *p[] = {&a[0],&a[1]};int* *q = &p[0]; //等价于 int* *q = p;printf("a[1] : %d\n",a[1]);printf("a[1] : %d\n",*p[1]);printf("a[1] : %d\n",**(q + 1));return 0;
这篇关于指针进阶(多级指针)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!