指针数组和数组指针

指针数组的本质是一个数组,数组里面的每一个元素存放着是指针。

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是表示二维数组的地址

你可能感兴趣的:(指针数组和数组指针)