数组指针是指向数组地址的指针,其本质为指针;
指针数组是数组元素为指针的数组(例如 int *p[3],定义了三个p[0],p[1],p[2]的指针),其本质为数组。
数组指针的使用在某些情况下与指针数组很相似,要注意区别。
为了能更好地理解数组指针,与普通指针及二级指针的区别,下面举例说明一下。
例如:{int a;int (*p)[5]=a;}这里a是个二维数组的数组名,相当于一个二级指针常量;
p是一个指针变量,它指向包含5个int元素的一维数组,此时p的增量一维数组长度为单位;
*p+i是二维数组a[i]的地址;
*(p+2)+3表示a地址(第一行为0行,第一列为0列),*(*(p+2)+3)表示a的值。
//(*p)[5]其中的5换成其他的数字在vc++6.0环境中都无法通过编译
(*p)其中的5在上述例子中没有表示任何意思你可以换成除0以外的整数,的作用就是帮助你记忆说你所指向的一维数组的长度。(不过除了与定义的二维数组的长度一致的不会警告之外 )其他的数会警告但是不影响结果。
数组指针: char c[] = {"妹", "妹", "你", "坐", "船", "头"}; char (*p); int i;
p = c; for(i=0; i<6; i++) { printf("%s, ", *(p+i)); //*(p++); }
printf("\n"); //p=c;/p--;
for(i=5; i>=0; i--) { printf("%s\n", *(p+i)); //*p--;/*--p; }
指针数组:
int i; char *pch = {"妹","妹","你","坐","船","头"}; //这种写法不提倡,应该先声明一个数组,再把地址给指针, for(i=0;i<6;i++) //否则很危险; { printf("%s, ",*(pch+i)); } printf("\n"); for(i=5; i>=0; i--) { printf("%s\n",*(pch+i)); }