C语言二级指针的用法(附带实例)
一个指针可以指向整型变量、实型变量、字符型变量,当然也可以指向另一个指针,此时称其为指向指针的指针,又叫做二级指针。

图 1 二级指针(指向指针的指针)
如上图所示,整型变量 i 的地址是 &i,将其值传递给指针变量 p1,则 p1 指向 i;同时,将 p1 的地址 &p1 传递给 p2,则 p2 指向 p1。这里的 p2 就是指向指针变量的指针,也就是二级指针。
二级指针的定义如下:
知道如何定义二级指针后,可以将图 1 用图 2 更形象地表示出来:

图 2 二级指针
【实例 1】利用二级指针,输出化学周期表前 20 个元素中的金属元素,具体代码如下:
【实例 2】利用二级指针输出一维数组中其值为偶数的元素,并统计偶数的个数,具体代码如下:
根据前面讲过的指针的用法,还可将实例 2 改写成如下形式:

图 1 二级指针(指向指针的指针)
如上图所示,整型变量 i 的地址是 &i,将其值传递给指针变量 p1,则 p1 指向 i;同时,将 p1 的地址 &p1 传递给 p2,则 p2 指向 p1。这里的 p2 就是指向指针变量的指针,也就是二级指针。
二级指针的定义如下:
类型标识符 **指针变量名;例如,“int **p;”的含义为定义一个指针变量 p,它指向另一个指针变量,该指针变量又指向一个基本整型变量。由于指针运算符“*”自右至左结合,所以上述定义相当于“int *(*p);”。
知道如何定义二级指针后,可以将图 1 用图 2 更形象地表示出来:

图 2 二级指针
【实例 1】利用二级指针,输出化学周期表前 20 个元素中的金属元素,具体代码如下:
#include<stdio.h> int main() { int i; /*定义循环控制变量*/ char **p; /*定义一个指向指针的指针变量*/ char *element[] = /*定义一个指针数组,并为其赋初值*/ { "锂", "铍", "钠", "镁", "铝", "钾", "钙" }; for(i = 0; i < 7; i++) /*输出指针数组中的各元素*/ { p = element + i; printf("%s\n", *p); } return 0; }程序运行结果为:
锂
铍
钠
镁
铝
钾
钙
【实例 2】利用二级指针输出一维数组中其值为偶数的元素,并统计偶数的个数,具体代码如下:
#include<stdio.h> int main() { int a[10], *p1, **p2, i, n = 0; printf("please input:\n"); for(i = 0; i < 10; i++) scanf("%d", &a[i]); /*给数组 a 中各元素赋值*/ p1 = a; /*将数组 a 的首地址赋给 p1*/ p2 = &p1; /*将指针 p1 的地址赋给 p2*/ printf("the array is:"); for(i = 0; i < 10; i++) { if(*(*p2 + i) % 2 == 0) /*如果是偶数*/ { printf("%5d", *(*p2 + i)); /*输出数组中的偶数元素*/ n++; /*偶数个数加 1*/ } } printf("\n"); printf("the number is:%d\n", n); return 0; }程序运行结果为:
please input:
1 2 3 4 5 6 7 8 9 10
the array is: 2 4 6 8 10
the number is:5
根据前面讲过的指针的用法,还可将实例 2 改写成如下形式:
#include<stdio.h> int main() { int a[10], *p1, **p2, n = 0; /*定义数组、指针等为基本整型*/ printf("please input:\n"); for(p1 = a; p1 < a + 10; p1++) /*指针 p1 从 a 的首地址开始变化*/ { p2 = &p1; scanf("%d", *p2); /*将指针 p1 的地址赋给 p2 */ /*通过指针变量给数组元素赋初值*/ } printf("the array is:"); for(p1 = a; p1 < a + 10; p1++) /*再次将指针 p1 的地址赋给 p2 */ { p2 = &p1; if(**p2 % 2 == 0) /*如果是偶数*/ { printf("%5d", **p2); /*将数组中的偶数元素输出*/ n++; /*偶数个数加 1*/ } } printf("\n"); printf("the number is:%d\n", n); return 0; }运行结果为:
please input:
1 2 3 4 5 6 7 8 9 10
the array is: 2 4 6 8 10
the number is:5