回复 5楼 DestinyLord
举个简单例子看对你有没帮助吧:
如果int a[10]; int *p = &a[0]; 那么*(p+1)就是指向a[1].
如果int a[4][3]; int (*p)[3] = a; 那么p+1指向的是二维数组的第二行.
int (*p)[3]定义了一个指向 含有3个元素的一维数组 的指针P,然后将二维数组a第0行第0列的地址赋予p,这种指针加法的单位是数组元素的长度(即加1等于跳过三个元素,也就是跳向下一行)与我在问题中提到的指针数组不一样。
还有数组名加整数n等于第n+1个数组元素的地址,虽然是书上写的但对于这点我有些疑问:
存储器单元和存储单元地址:存储器是由大量寄存器组成的,其中每一个寄存器就称为一个存储单元。它可存放一个有独立意义的二进制代码。一个代码由若干位(bit)组成,代码的位数称为位长,习惯上也称为字长。存储单元一般应具有存储数据和读写数据的功能,一般以8位二进制作为一个存储单元,也就是一个字节。在计算机中的存储器往往有成千上万个存储单元,为了使存入和取出不发生混淆,必须给每个存储单元一个唯一的固定编号,这个编号就称为存储单元的地址。 (由此可见每个存储单元能存储一个字节,也就是说一个字节对应于一个地址。数组名a代表第1个元素的地址假设为0000,加n是不是往后推n个存储单元其地址为000n。这在数组的数据类型为char(1字节)的时候没问题指向第n+1个元素。当数组类型为int(2字节)、float(4字节)时就不是指向第n+1个元素了,而是指向第n/2、n/4个元素。)
以上是我的想法,用Turbo c++验证了是错误的。只不过想知道错在哪