【问题标题】:C array expressionC 数组表达式
【发布时间】:2014-11-04 14:01:02
【问题描述】:

我正在尝试解决 C 练习题:

假设fubar 被定义为一个数组,以下指针表达式的等效C 数组表达式是什么。每个数组元素是什么类型或定义了多少个元素都没有关系。

*fubar 等价于 _____(使用[] 但没有* 的等价数组表达式)

我最初的答案是fubar[0],但我真的不知道。

【问题讨论】:

  • 是的*fubar 等价于fubar[0]
  • 是什么让您认为fubar[0] 不是正确答案?

标签: c arrays pointers memory


【解决方案1】:

*fubar 只是取消引用fubar

fubar[0] 等价于*(fubar + 0)。原因是fubar 指向数组的开头,所以如果你在fubar 之后跳转N 位置,你会到达N-th 元素,即fubar[k]

所以是的,*fubar 等同于 fubar[0]。即fubar = &(fubar[0])

【讨论】:

  • 还有 0[fubar],至少在 C 中(但不是在 C++ 中)
  • 是的,但我不确定这是否是合法的 ANSI C。不过这是一种不好的做法。
【解决方案2】:

你的答案是正确的。 *fubar 等价于fubar[0]

一般来说,*(fubar + k) 等价于fubar[k]

【讨论】:

  • 还有k[fubar],至少在C
  • @BasileStarynkevitch 啊,是的,这也符合问题中的要求(使用[] 而不使用*)。
【解决方案3】:

很容易,您认为数组的名称意味着地址。 所以,*(fubar + i) 等价于fubar[i]。 因此,它会在 fubar 到达第 i 个元素之后跳转 i 个位置。 要理解,请参阅打击示例。 也就是说,*(fubar+1) 等价于fubar[1]*(fubar+2) 等价于fubar[2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2018-05-25
    相关资源
    最近更新 更多