数组与指针的矛盾

来源:百度知道 编辑:UC知道 时间:2024/06/11 01:05:05
我自学C没有人教所以有问题,除了看书就是网上寻求帮助,希望哪位好心的人给我指点下...
例:设 int a[3][4],(*p)(4);
p=a;
问:①a[0]表示数组a[3][4]里的第一行的首地址,而a也是数组a[3][4]第一行的首地址,那为什么书上说“a+0,又可表示&a[0]”,而不是a+0(或a)等于a[0],为什么前面要个取地址运算符“&”?
②如果说“a+0,又可表示&a[0]”是正确的,那么可推出这样的等式
由:a==&a[0],而a[0]是 a[0][0]、a[0][1]、a[0][2]、a[0][3] 四个元素的首地址,则a[0]==&a[0][0]
所以:a==&a[0]==&&a[0][0] 即 a==&&a[0][0]
问:由以上我推出的等式a==&a[0]==&&a[0][0],为什么又是错的,而a==&a[0][0]才是正确的,照这样说,那不是&a[0]==&a[0][0]....矛盾及了
③问:a,a[0],a[0][0],p;他们相互之间到底是什么样的关系

晕``差点被搅晕了
(这个问题你可以研究一下二级指针就不难明白了,我在这大概说下,如果还有问题我们在讨论)
1.对于“a+0,又可表示&a[0]”,因为正如你所说a可以表示数组的首地址,而a+0表示a向后偏移0个位置,那还是a的首地址啊,而&a[0]是最正统的表示a的首地址的方式(至于为啥不是直接a[0],这个需要用到二级指针来解释,比较多,这就不赘述了)
2."&&a[0][0]"是错误的表示.&a[0]==&a[0][0]是成立的
3.a和a[0]都表示数组a的首地址,a[0][0]是第一个元素,而p又是一个指针数组```` 有点麻烦` 总之可以请你先看二级指针的内容嘛` 有问题我们在来讨论`

最后建议你可以看下--科学出版社(出版的)--冯山(主编的)--《程序设计基础教程---C语言版》的第九章 指针 的9.2节的多级指针``那里面描述的比其他参考书籍相对相对清楚` 建议你先看下` 不懂在讨论

a==a[0]==&a[0]==&a[0][0]
a,a[0],p它们的值是相等的,都表示这个二维数组的首地址;而a[0][0]表示这个二维数组的第一个元素

http://zhidao.baidu.com/question/112048459.html
yyrryyrr2的回答