指针求助

来源:百度知道 编辑:UC知道 时间:2024/09/24 12:00:44
若有以下的定义,int t[3][2];能正确表示t数组元素地址的表达式是(C)
A) &t[3][2] B) t[3] C) t[1] D) *t[2]
为什么,望高手明示。

告诉你一个简单的方法:
设n为整数,那么, 不管a是指针还是数组名,
a[n]与 *(a+n) 这两种写法等价,
&a[n]与 a+n 这两种写法等价.

下面分析:
A 明显越界

B 利用上述等价关系, t[3]等价于 t[3]+0, 继续转换(把t[3]看成一个整体, 对应上面说的a), 等价于 &t[3][0]. 显然也越界.

C 类似可知, t[1]等价于 &t[1][0]. 故C是正确答案.

D *t[2]等价于*(t[2]+0), 继续变换(把t[2]看成上面的a,作为整体), 最终等价于 t[2][0]. 这是数组的一个元素, 而不是数组元素的地址.

int i[3][2]定义了一个行为3行,列为2列的2维数组。

你把他想象成为一个表格的样子。这个i数组,就是一个3行2列的“表格”。每行的开头,就是该行的地址咯。可能你对指针这个概念不太清楚,也许你还是不懂为什么答案是C,只要你记住,指针就是地址就对了。对于多维数组(一般是2维),第一个下标就是该行的地址就是了。

i与i[0]和&i[0][0]都是同一个地址

为什么A和B不对,因为超过数组的维了,要注意数组是从0开始的;D是i[2][0],也就是它的值。

B 是一个变量
A是错的,因为没有t[3][2]这个数。
C是一维数组
所以选D

t[3][2]是个二维数组,而在内存中它是安行展开成一维排列的,所以t[1]就是二维数组的t[0][1],C语言中规定数组中第一个元素的地址叫做首地址,可以表示这个数组的地址。就是这样子

对数组而言,它的地址就是指这个数组的首地址,二维数组a[3][2]你可以把他看做是a[1][2],a[2][2],a[3][2]三个一维数组,因此数组的首地址就是a[1][2]的首地址,即其数组名a[1]。

很明显AB都越界了,D选项等同于t[2][0],t[1]其实就是指向t[1][0]的地址