现在的位置: 首页 > 综合 > 正文

C指针原理(20)-C指针基础

2013年01月31日 ⁄ 综合 ⁄ 共 1867字 ⁄ 字号 评论关闭

5、指针数组

指针数组就是数组里存放的是指针。

 

本博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/

#include <stdio.h>

int main(void){

        int i;

        char x[10]="ABCDEFGHIJ";

        char *p_x[10];

        for (i=0;i<10;i++){

                p_x[i]=x+i;

               //p_x[i]=&x[i];

        }

        for (i=0;i<10;i++){

                printf("%c ",*p_x[i]);

        }

        return 1;

}

上面定义了一个指针数组,数组的每个元素都是指针,每个指针指向x数组的相应元素。

其中,p_x为指针数组,通过for循环中的p_x[i]=x+i完成指针数组每个元素的赋值。这里也可以写成p_x[i]=&x[i]。最后以数组下标的方式访问数组,输出元素。

我们让这个程序更复杂一些,加入指针的指针。

定义pp_x,让它指向指针数组的第一个元素,然后向后移动指针,输出元素。源程序如下:

#include <stdio.h>

int main(void){

        int i;

        char x[10]="ABCDEFGHIJ";

        char *p_x[10];

        for (i=0;i<10;i++){

               p_x[i]=x+i;

       }

        char **pp_x=NULL;

        for (i=0;i<10;i++){

                printf("%c ",*p_x[i]);

        }

        printf ("\n");

        for (pp_x=p_x;pp_x<(p_x+10);pp_x++){

                printf("%c   ",**pp_x);

        }

        return 1;

}

 

 

运行程序

myhaspl@myhaspl:~ % make

cc test4.c -o mytest

myhaspl@myhaspl:~ % ./mytest

A B C D E F G H I J 

A   B   C   D   E   F   G   H   I   J  

最后我们定义一个更复杂的例子,指针的指针的数组,名字有些长。在例子的最后代码使用了指向指针的指针的指针***ppp_x,用它来最后输出10个元素中的5个元素(每隔一个元素输出一个元素。类似的还使用temp_x,原理类似。

myhaspl@myhaspl:~ % vim test4.c

//code:myhaspl@qq.com

#include <stdio.h>

int main(void){

        int i;

        char x[10]="ABCDEFGHIJ";

        char **pp_x[5];

        char *p_x[10];

        for (i=0;i<10;i++){

               p_x[i]=x+i;

       }

        char ***temp_x=pp_x;

        for (i=0;i<10;i+=2){

                *temp_x=&p_x[i];

                temp_x++;

        }

        printf ("\n");

        char ***ppp_x;

        for (ppp_x=pp_x;ppp_x<(pp_x+5);ppp_x++){

                printf("%c   ",***ppp_x);

        }

        return 1;

        运行程序

myhaspl@myhaspl:~ % make clean

rm mytest

myhaspl@myhaspl:~ % make

cc test4.c -o mytest

myhaspl@myhaspl:~ % ./mytest

 

A   C   E   G   I   程序每隔一个元素对x数组的内容进行输出。

抱歉!评论已关闭.