指针数组(*p[])用自己的话来讲就是一个存储指针的数组,数组里面的元素是指针。
举个例子:
char *a = "aaa";
char *b = "bbb";
char *c = "ccc";
char *p[3] = {a,b,c}; //里面的元素是a,b,c指针
下面我们来深入了解指针数组的内在
#include<stdio.h>
int main()
{
char a[] = "ghhh";
char b[] = "elkj";
char c[] = "rrrr";
char *p[3] = {a,b,c};
printf("*(p[1]+1)= %c\n",*(p[1]+1));
printf("*p = %s ",*p);
printf("p = %s ",p);
printf("a = %s\n",a);
printf("a = %p ",a);
printf("*p = %p\n",*p);
printf("&a = %p ",&a);
printf("p = %p\n ",p);
}
运行结果:
从上面可以看出来,指针数组其实有点像二维数组,可以通过p[i]来打印出相应的字符串,(p[i]+j)打印出对应的单字符;从地址看p == a;(或者说p[0]==a,p[1]==b,p[2]==c);这里我一直有个不明白printf("&a = %p ",&a)和printf("a = %p ",a)的输出结果是一样(可能因为我不太明白指针是如何存储的),以及 printf("p = %s “,p);为什么输出的是p = a;而printf(”&a = %p ",&a)跟printf("p = %p\n ",p);输出的结果又不相同,有人懂的话希望可以帮助我解答疑惑。
指针数组也可以通过如下定义:
char *p[3] = {"ddd","fff","eeeee"};
以上就是我对指针数组的认识。