#include <stdio.h>
int main()
{
char arry[3]={ 'a', 'b', 'c' };
char *p1[3]; //指针数组 : 指针p1[0], 指针p1[1], 指针p1[2] ;本身是数组,
//数组里的每个元素的类型为指针,指向的数据类型为char型
char (*p2)[3]; //数组指针 : 本身是指针,指向char[3]数组的指针 ,数组里的数据类型为char型
p1[1] = arry;
p2 = &arry;
/* 这里的&arry并不是取arry这个变量本身的地址,这里arry代表的是数组本身
-
因为p2 为指向char[3]数组的指针类型,而要对它进行赋值,也应给出相应的指向数组类型的指针
-
而&arry在这就表示指向char[3]数组类型的指针,跟 printf(" arry = %p\n\r",&arry+1) 的情况相似
*/printf(" arry = %p\n\r",arry); printf(" &arry = %p\n\r",&arry); printf(" &arry+1 = %p\n\r",&arry+1);
//这里的加1不是以sizeof(char)为单位的,而是以sizeof(arry),整个数组为单位进行加地址
printf(" p2 = %p\n\r",p2); printf(" p1[1] = %p\n\r",p1[1]); printf(" p1 = %c\n\r",*(p1[1]+1)); printf(" p2 = %c\n\r",*(*p2+1)); **return 0;** }
输出:
由输出可以看出:&arry代表的是整个数组,数组的大小为3字节,而&arry+1=0x7fff1ca88f0+3