我自学C没有人教所以有问题,除了看书就是网上寻求帮助,希望哪位好心的人给我指点下...

来源:百度知道 编辑:UC知道 时间:2024/06/05 12:21:05
例:设 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;他们相互之间到底是什么样的关系
不对的,,你的答案不好,,我看了下书,,书上说有行地址和列地址,,对行地址进行运算后得到的是一个确定的数

首先学语言过程中,
计算机的语言不要用你的逻辑来推理,计算机由他固定推理方式,为什么呢,就是这么规定的,没有为什么。为什么我的显示器壳子是白色的?因为出场的时候就这么设置的。如果我改了颜色那就不是这个显示器了,就是我改过颜色的显示器了。所以不要问为什么,要记住就可以了。
按理说直接用a是错误的用法。你不能直接用a,a是一个数组,不代表任何数据。
a[3][4]与a是不同的概念,但是这里涉及到语言的语法问题,如果语言中认为这是对的,那就是对的。你要懂得适应。
p前面加了星号,就是一个指针而已,不代表任何数据。他只是指向一个地址,实际上读取的数据是另一个变量。
a就是一个变量名字。
a[0]一位数组的地址0
a[0][0]二位数组的地址0,0
如果你不给他们建立关系,这三个就没有任何关系。