数组指针与指针数组

来源:互联网 发布:天猫手机淘宝 编辑:程序博客网 时间:2024/04/30 09:23

数组指针是指向数组的,
如: int a[3][3],(*p)[3];
     p=a;
这里(*p)[3]用于告诉编译系统,它是一个指针,指向一个长度为3的整型数组。这样在用指针访问其所指向的内存单元的时候就可以用*(*(p+i)+j)来表示a[i][j];
若:int a[3][3],*p;
     p=a;
就需用:*(p+3*i+j)来表示a[i][j].


指针数组是这样一种特殊的数组:它的每一个数组元素都是一个指针。
如:int *p[3];
*p[0],*p[1],*p[2]都是一个指针。
我看了你所说的有关指针问题的看法,我非常同意你所说的.
其实我也有一点看法:所谓指针数组吗,其实就可以把他看成一个结构提指针,只是他里面的元素都是相同的类型.例如:int (*p)[22];p就是指向一个由10个整型单元构成的数组的指针.p必须是指向由10个整型单元构成的数组,就如一个结构体指针必须指向与它相同类型的一个结构体一样

前言:
其实数组也就是一个逻辑上的拥有首地址的连续的内存空间。
1。我们常常用改变下标的方式来访问数组,本质上和通过加减某种特定类型的指针来实现在逻辑内存上的跳跃是相同的,其实数组的越界和程序员通过指针强行访问逻辑内存是一样的原理,只是指针更加灵活,同时也带来的大量的安全性问题。
2。而对于诸如   int*(*p)[i]   这样的问题,无非就是一个指针的指针,而后一指针表象上就是那个数组,所以如果我们要想访问数组元素,就必须通过多加一个指针的方式来访问,而且还需要注意的是,后一指针也就是表象上的数组的寻址或者是跳跃方式是按照每一个元素以sizeof(int)的空间来跳跃的,我们也可以让这样的int成为其他的基本类型或者是扩展类型,只不过改变的跳跃的空间的大小或者是方式(这里的方式可以认为是某种具有嵌套关系的扩展类型)。