设 int a[3][4]; ,则与元素a[0][0]不等价的表达形式是( )。
A.
*a
B.
**a
C.
*a[0]
D.
*(*(a+0)+0)
D太明显了,就是ABC不太懂,肯定是AB里选一个,但是我觉得A是等价的,不懂。求指点下ABC
设 int a[3][4]; ,则与元素a[0][0]不等价的表达形式是( )。
A.
*a
B.
**a
C.
*a[0]
D.
*(*(a+0)+0)
D太明显了,就是ABC不太懂,肯定是AB里选一个,但是我觉得A是等价的,不懂。求指点下ABC
这里* a 不等价,因为a是一个二维数组,可以想象成a是指向4个行指针的指针,对a取 * 相当于定位到了二维数组的第一行即等价于a[0],而非a[0][0]
对于D你知道是等价的,而0与任何东西相加都可省略,即等于答案B,所以既然你知道D正确,那B也正确。
对于C,因为a是二维数组,所以a[0]可以理解为拿到了第一行row=0的首地址,此时你理解成一维如tmp[]={1,2,3},那么* tmp就是取到了这个一维数组的第一个元素。相应的对于a[0]此时就相当于tmp,对其加 * 就相当于取到了第一行的第一个数,即C也正确