楼主的帖子和书不符..几个疑问?
楼主说
int (*p)[n] 指向二维数组的指针变量,
但谭浩强<C程序设计>说是指向由n个元素组成的一维数组的指针变量.但举的例子,也是用这个指针变量指向一个二维数组的.如下:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4];
p=a
这两种说法的含义就不一样了,
我理解,这个int (*p)[4]本身只是一个由4个元素组成的一维数组的指针变量,4个元素为(*p)[0],(*p)[1],(*p)[2],(*p)[3].
我试过通过
printf("%o,%o,%o,%o---d%,%d,%d,%d\n",(*p)[0],(*p)[1],(*p)[2],(*p)[3],(*p)[0],(*p)[1],(*p)[2],(*p)[3])
来查看他们是地址还是值,结果显示他们是值(1,2,3,4)
有疑问了:
int *p2=a指 向一个变量的指针变量,p2是地址a,*p2指向1
但上面的int (*p)[4]是指向一个由4个元素组成的一维数组,p是地址a,指针变量指向什么呢?
如果是指向1,2,3,4这四个值,那么",(*p)[0],(*p)[1],(*p)[2],(*p)[3]) 的内容就是地址,但是他们却是值(1,2,3,4),只有p是地址(a), 而且,(*p)[0]的地址和p的地址是完全不一样的(经过测试).那么这些值",(*p)[0],(*p)[1],(*p)[2],(*p)[3]) 的内容存放在了哪里?
另外,上面的(*p)[4]的4不一定是4,可以是其他值,比如3, (*p)[3],那么,他就以一行3列来处理.
由此可见,(*p)[n]不是指向二维数组的,指向由n个元素组成的一维数组的.
[此贴子已经被作者于2004-12-30 10:43:30编辑过]