若有定义int a[2][3],则对a数组的第i行第j元素地址正确引用的是,,A.*(a[i]+j) B.(a+J) C.*(a+j) D.a[i]+j

我感觉一个也不对,应该是(a+i)+j或是(a[i])+j,是这样吗

您的理解是正确的,如果要正确引用a数组的第i行第j个元素的地址,可以使用以下两种方法:

1、a[i] + j:首先通过a[i]访问到a数组的第i行,然后通过+j偏移j个元素的大小,即可得到第i行第j个元素的地址。

2、*(a + i) + j:首先通过a + i访问到a数组的第i行,然后用*(a + i)解引用获取第i行的首地址,再通过+j偏移j个元素的大小,即可得到第i行第j个元素的地址。

其中,第一种方法更加简洁明了,也更符合人的思维习惯;第二种方法则更加通用,可以方便地应用到二维数组和多维数组的访问中。

根据题目中的选项,其中选项A和C都不正确,因为A.*(a[i]+j)和C.(a+j)都使用了解引用运算符,但没有指定要解引用的指针是什么,因此无法得到正确的地址。选项B中的(a+J)只能获取到a数组的第j列的首地址,而无法获取到第i行的地址。选项D中的a[i]+j可以正确地获取到第i行第j个元素的地址。

您的感觉是正确的。对于定义int a[2][3],a[i]表示数组a的第i行,a[i]+j表示数组a的第i行第j列的元素地址。因此,正确引用a数组的第i行第j元素地址应该是(a[i]+j)或者是*(a+i)+j。选项A中使用了指向结构体成员的指针运算符“->”,不适用于数组元素的引用;选项B中使用了数组名加上列数的方式,不正确;选项C中使用了指向一级指针的指针运算符“*”,也不适用于数组元素的引用;选项D中使用了二维数组名加上列数的方式,同样不正确。