个人技术分享

一、问题

        对于字符串数组该如何操作(⽽且是使⽤指针数组存储)?

二、解答

        使⽤指针的指针实现对字符串数组中字符串的输出。指向指针的指针即是指向指针数据的指针变量。这⾥创建⼀个指针数组 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;
}

三、总结

        指针数组本身存储的就是字符串的⾸地址,再使⽤⼆级指针去进⾏操作,这很难理解, 但是所带来的优越性能却是⽆可⽐拟的,所以⼤家⼀定要尽⼒去理解、掌握这⼀部分内容。