这是一个有关指针数组和数组指针的代码:
//********BEGIN
#include <stdio.h>
int main()
{
char aa[3][2]={{'f','i'},{'s','e'},{'t','h'}};
char *ap[3];
char (*pa)[2];
int i;
for ( i=0;i<3;i++)
{ap[i]=aa[i];
printf("%c %c/n",*ap[i],*(ap[i]+1));
}
pa=aa;
for(i=0;i<3;i++)
printf("%c %c/n",**(pa+i),*(*(pa+i)+1));
return 0;
}
//_________END
结果:
f i
s e
t h
f i
s e
t h
可以看出,两种输出是一样的。。。
这两个名词实在是太拗口,我真的不想再去提他们
我的记忆方法是两个都有数字,一个表示“行”,另一个表示“列”
这怎么说呢,比如 int *p[row]:
这是一个一维数组,它有三个元素,并且这三个元素都是int 型的指针;
所以 可以这样赋值: p[1]=一个一维数组的地址。。
这样子 数字就表示行数。。
int (*p)[column]; 表示p 是一个指针,它不是一个int型的指针,而一个数组指针,数组的大小是column
也就说,(p+1)指向的地址比p指向的地址要后移column个int单元。
如果这样赋值: p=一个二维数组的地址,
这样子数字就表示列数了。。
如果硬要我来玩文字游戏的话,就这么说吧;
指针数组: 指针型的数组
数组指针: 数组型的指针
还是没有讲明白啊
我希望得到英文原版的定义:in English.,有的时候中文不好翻译,就像不会中文的老外怎么也理解不了中国对联
其他解释:
int *a[N];/*首先a是一个数组,因为a的后面紧跟了一个[],它的优先级是很高的(比*高),其次它的每一个元素a[0]、a[1]、a[2]、 a[3]....都是一个指针,是一个int型的指针,实际上关于指针的类型只是一种表示方法与叫法而已,每一种指针都是一样的,我们说一个指针的类型是 指它所能指向的类型,比方说这里的每个指针元素都指向一个int型的整数。*/
int (*a)[N];/*首先a是一个指针,因为*a外面有一对(),其次这针指向具有N个元素的整型数组,因为后面有一对[] 如果把指向数组的指针加上1,那么指针实际移动了sizeof(数组)个字节的距离。*/
也就是说:int (*a)[N]“生下来”就只能指向一个有N个元素的整形数组。不像int *p,它可以指向随便什么东东。