前言:
此篇是针对 指向指针数据的指针 方面的练习。
解题思路:
定义一个指针数组 name,并对它初始化,使 name 数组中每一个元素分别指向5个字符串。定义一个指向指针型数据的指针变量 p ,使 p 先后指向 name 数组中各元素,输出这些元素所指向的字符串。
正文:
#include<stdio.h>
int main() {
char *name[]= {"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
char **p;
int i;
for(i=0; i<5; i++) {
p=name+i;
printf("%s\n",*p);
}
return 0;
}
程序分析:
p 是指向 char * 型数据的指针变量,即指向指针的指针。在第1次执行 for 循环体时,赋值语句 “p=name+i;” 使 p 指向 name 数组的0号元素 name[0] ,* p 是 name[0] 的值,即第1个字符串首字符的地址,用 printf 函数输出第1个字符串(格式符为%s)。执行5次循环体,依次输出5个字符串。
说明:
指针数组的元素也可以不指向字符串,而指向整型数据或实型数据等,例如:
int a[5]= {1,3,5,7,9};
int *num[5],i;
int **p; //p是指向int*型数据的指针变量
for(i=0; i<5; i++)
num[i]=&a[i];
为了得到 a[2] 中的数据5,可以先使 p=num+2,然后输出 **p。注意 * p 是 num[2] 的值,而 num[2] 的值是 a[2] 的地址,因此 **p 是 a[2] 的值5,见图8.39。
总结:
运行结果: