gpt4 book ai didi

c - 如何使用带有解引用和加法的指针算术?

转载 作者:行者123 更新时间:2023-11-30 14:41:59 25 4
gpt4 key购买 nike

我刚刚参加了计算机科学类(class)的考试。考试时,有一个二维 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 分,错了 4 分,错了 6 分,得了 3 分。如果我现在可以改变我的答案,我不知道为什么 3 是错误的,不知道为什么 4 是错误的,我相信 6 会是 40。

最佳答案

“3. a+1 = 0x112”是错误的:

  • a 位于 0x100。 a 的元素是三个 int 的数组。 int 是 4 个字节,所以三个 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 的第一个元素,因此它是包含 30、40 和 50 的三个 int 的数组。作为通用表达式中的数组,它会自动转换为指向其第一个元素的指针,因此它指向 30。加 1 会产生指向下一个元素的指针,因此 a[0]+1是一个指向 40 的指针。然后用 * 取消引用它会产生 40。

关于c - 如何使用带有解引用和加法的指针算术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54658245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com