12若a为二维数组,则a[1][3]等价于A*(a+1)+3) B. *(a[1]+3)C. (*(a+1)+3))D. &

1个回答
展开全部
摘要 选项B. *(a[1]+3) 表示二维数组a中第2行第4个元素,不是我们要找的第2行第4列的元素。选项D. &a[1]+3*((a+1)+3) 中的&a[1]表示二维数组a的第2行的地址,加上3*((a+1)+3)后得到的是一个地址值,不是我们要找的元素。
咨询记录 · 回答于2023-03-10
12若a为二维数组,则a[1][3]等价于A*(a+1)+3) B. *(a[1]+3)C. (*(a+1)+3))D. &
12题bc的区别
选项B. *(a[1]+3) 表示二维数组a中第2行第4个元素,不是我们要找的第2行第4列的元素。选项D. &a[1]+3*((a+1)+3) 中的&a[1]表示二维数组a的第2行的地址,加上3*((a+1)+3)后得到的是一个地址值,不是我们要找的元素。
选项B和选项C的区别在于指针的类型不同。选项B. *(a[1]+3) 中,a[1]表示二维数组a中第2行的首元素的地址,即&a[1][0]。加上3后表示第2行中第4个元素的地址,再用解引用符号 * 得到该元素的值。这里使用了一个一级指针。而选项C. (*(a+1)+3) 中,(a+1)表示二维数组a中第2行的首元素的地址,即&a[1][0]。将其解引用得到第2行首元素的值,然后加上3表示第2行中第4个元素的地址,再次解引用得到该元素的值。这里使用了一个二级指针(也可以看成是一个一级指针与一个整型数相加)。选项B和选项C虽然都可以得到二维数组a中第2行第4列的元素值,但使用了不同类型的指针。
这一句我不是很理解
解引用得到一个值后加上三
不应该是这个值得基础上加上3吗
为什么是得到第四个元素的地址?
二维数组a可以看作是一个由多个一维数组组成的数组,每个一维数组都有固定的长度。因此,在内存中,二维数组a的各个元素是按照行优先顺序依次存储的。对于一个二维数组a,其第i行第j列的元素可以表示为a[i][j],也可以表示为*(a[i]+j)或者*(*(a+i)+j)。这里使用了指针运算符 * 和地址运算符 &。根据上述定义和规律,选项C. (*(a+1)+3) 的含义如下:1. a+1 表示二维数组a中第2行的首元素(即&a[1][0])的地址。2. *(a+1) 表示二维数组a中第2行首元素的值(即a[1][0])。3. (*(a+1)+3) 表示第2行中第4个元素(即a[1][3])的地址。4. *(*(a+1)+3) 表示第2行中第4个元素的值(即a[1][3])。因此,选项C. (*(a+1)+3) 可以得到二维数组a中第2行第4列的元素值。
亲亲 请详细说明您的问题
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消