一、问题
对于字符串数组该如何操作(⽽且是使⽤指针数组存储)?
二、解答
使⽤指针的指针实现对字符串数组中字符串的输出。指向指针的指针即是指向指针数据的指针变量。这⾥创建⼀个指针数组 strings,它的每个数组元素相当于⼀个指针变量,都可以指向⼀个整型变量,其值为地址,如图所示。
strings 是⼀个数组,它的每个元素都有相应的地址。数组名 stirngs 代表该指针数组的⾸单元的指针,就是说指针数组⾸单元中存放的也是⼀个指针。strings+i 是 strings[i] 的地址。strings+i 就是指向指针型数据的指针。
指向指针数据的指针变量定义语句形式如下。
char **P;
p 的前⾯有两个 * 号,* 运算符是从右⾄左结合,**p 就相当于*(*p),*p 表示定义⼀个指针变量,在其前⾯再添加⼀个 * 号,表示指针变量 p 是指向⼀个指针变量。*p 就表示 p 所指向的另⼀个指针变量,即⼀个地址。**p是 p 间接指向的对象的值。例如,这⾥ *(p+2) 就表示 strings[2]中的内容,它也是⼀个指针,指向字符串“ World wide ”。因此,输出字符串时,语句为:
printf(("%s\n",*(p+i));
下⾯来看⼀个具体的程序,让⼤家对此有更进⼀步的了解。
#include <stdio.h>
int main()
{
char *strings[] = {"C language",
"Basic",
"World wide",
"Olyupic",
"Great Wall"};
char **p, i;
p = strings;
for (i = 0; i < 5; i++)
{
printf("%s\n", *(p + i));
}
return 0;
}
三、总结
指针数组本身存储的就是字符串的⾸地址,再使⽤⼆级指针去进⾏操作,这很难理解, 但是所带来的优越性能却是⽆可⽐拟的,所以⼤家⼀定要尽⼒去理解、掌握这⼀部分内容。