该例程为个人用以理解数组指针,指针数组和二维数组之间的关系,以及它们的简单使用方法,仅供理解和参考。
关于三者的概念可以查阅相关书籍或资料。
#include <stdio.h>
int main(){
#if 0
int i;
char *pch[6]={"一","二","三","四","五","六"};//汉字2bytes,指针数组
for(i=0;i<6;i++)
{
printf("%s, ",pch[i]);
}
printf("\n");
for(i=5; i>=0; i--)
{
printf("%s\n",pch[i]);
}
#endif
#if 0
int i;
int c[4] = {1,3,5,7};
int *a[4]; //指针数组
int (*b)[4]; //数组指针
b=&c;
for(i=0;i<4;i++)
{
a[i]=&c[i];
}
for(i=0;i<4;i++)
{
printf("a[%d]=%d\n",i,*a[i]);
}
for(i=0;i<4;i++)
{
printf("b[%d]=%d\n",i,(*b)[i]);
}
printf("&c=%x\n", c);//数组名为首地址
printf("c[0]=%d\n", c[0]);//数组名+index对应于index的元素
printf("(*b)=%x\n", (*b));//(*b)相当于数组名c,为首地址
printf("(*b)[0]=%d\n", (*b)[0]);//index数组元素
printf("*(*b)=%d\n", *(*b));//*(*b)数组首地址元素
#endif
#if 1
int i;
char a[3][5] = {"abcd\0", //二维数组
"efgh\0",
"ijkl\0"};
char *p[3]={a[0],a[1],a[2]}; //指针数组
char (*q)[5]; //数组指针
for(i=0;i<3;i++)
{
printf("a[%d]string=%s\n",i,a[i]);
}
/* for(i=0;i<3;i++) //同上面的初始化
{
p[i]=&a[i];
}
*/
for(i=0;i<3;i++)
{
printf("p[%d]string=%s\n",i,p[i]);
}
printf("&a=%x\n",a);
printf("&p=%x\n",*p);
for(i=0;i<3;i++)
{
q=&a[i];
printf("q%d->string=%s\n",i,q);
}
#endif
return 0;
}