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数组的内容进行输出。