指针数组的本质是一个数组,数组里面的每一个元素存放着是指针。
char *p[3]={"hello","my","world"};
这里的栈区中存放着以3个指针,而hello my world 存储在全局区,然后栈区的每个指针指向对应的字符串。
sizeof(p)=3*4=12
数组指针:
数组指针的本质就是一个指向数组地址的指针。所占内存空间大小为4
char(*p)[4]
这里的p指向一个含有4个char类型的数组。
假设char a[4]={'a','b','c','d'};
数组的地址和数组中首元素的地址相同
a+1是在数组移动一个元素的长度,移动距离为1,而p+1是是移动一个数组的长度,移动距离为4。
关于二维数组和指针的关系:
二维数组的本质是一个二维指针,例如 char a[2][3] ,char **p=a;
*p(i)+j 是指向元素p[i][j]的地址,等同于a[i]+j
*(*p(i)+j)表示a[i][j]元素,等同于*p[i][j]
*p(i)是指向数组第i行的地址
*p是表示二维数组的地址