我刚刚参加了计算机科学课的考试。在考试中,有一个二维int数组,我们被要求计算值。我以为我理解指针算术,但我误解了一半,所以我希望这里的人可以更好地解释它。
我已经看了几个Youtube视频,看了多个不同的演讲幻灯片/笔记,当它是二维数组时,在理解这一概念时仍然遇到困难,我理解是一维的。
int a [2] [3] = {{30,40,50},{60,70,80}};
显示以下结果:
1. a =
2. a [0] =
3. a + 1 =
4. a [0] [0] + 1 =
5. * a [0] +1 =
6. *(a [0] +1)=
我们假定地址从0x100开始。
我给出了以下答案:
1. a = 0x100
2. a [0] = 0x100。
3. a + 1 = 0x112。
4. a [0] [0] +1 = 0x112。
5. * a [0] +1 = 11.
6. *(a [0] +1)= 0x104。
................................................... ......................
我得到3分半信用,分别是3分,4分错和6分错。
如果我现在可以更改答案,我不知道为什么3错误了,也不知道为什么4错误了,我相信6就是40。
答案 0 :(得分:1)
“ 3。 a + 1 = 0x112”错误:
a
的大小为0x100。 a
的元素是三个int
的数组。 int
是四个字节,所以三个int
是12个字节,因此a
的元素是12个字节。因此,a+1
是a
之后的一个元素,为0x100 + 12 = 0x10c。“ 4。 a [0] [0] +1 = 0x112”错误:
a[0][0]
是30。30+ 1是31。“ 6。 *(a [0] + 1)= 0x104”错误:
a[0]
是a
的第一个元素,因此它是三个int
的数组,包含30、40和50。作为一般表达式中的数组,它会自动转换指向它的第一个元素的指针,因此它指向30。加1会得到一个指向下一个元素的指针,因此a[0]+1
是指向40的指针。然后用*
对其进行解引用会产生40。 / li>