若有定义:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},(*p)[4];p=a; ,( )对数组a元素的引用是正确的。

2025-02-06 22:01:41
推荐回答(3个)
回答(1):

int (*p)[4];表明p是行指针,即p指向二维数组中的一行。
p=a;这一句表示p指向a[0],也就是指向a数组第0行的第0个元素(a[0][0])的地址。
p[2]表示p指向a数组的第二行,即指向a[2]行,也就指向a[2][0]的地址。
p[2]+3表示行指针指向a数组的第二行(从第0行开始),(从0开始)第3个元素,也就是a[2][3],*(p[2]+3)表示第2行,第3个元素的值。
p+4表示第四行(从0行开始),因为a数组没有第四行,所以是错的。
p[4]表示第四行(从0行开始),原因同上。
*p表示a数组第0行,第0列地址,**p表示a[0][0]的值,值不会再包含元素,所以(**p)[2]是错的。

回答(2):

A。
a数组的长度是3,*(p[4])和**(p+4)都会造成超出地址范围
(**p)[2]表达不正确
*(p[2]+3) 是a[2][3];

回答(3):

答案
a