【问题标题】:What potential error can be caused by retrieving and changing of a value in the same line?检索和更改同一行中的值会导致哪些潜在错误?
【发布时间】:2013-01-19 21:01:12
【问题描述】:

有人问我,如果我尝试检索参考值然后尝试在同一行代码中更改它会发生什么。我的回答是什么都不会发生,因为我在没有遇到任何编译器错误(至少在 C# 或 Java 中)之前尝试这样做。

这个问题的真正答案是什么?

这是带有伪代码的示例:

Module main()
    Call changeNumber(10)
End Module

Module changeNumber(Integer Ref number)
    Set number = number * number
    Display number
End Module

(PS。抱歉没有正确格式化/创建这篇文章。我有bit of an issue here。)

【问题讨论】:

  • 不是VB,是伪代码。但我同意它应该得到一个不同的标签,因为这个问题不是 C# 特有的。
  • 您可能在伪代码中走得太远了 - 绝对不可能在 C# 中将整数文字作为“ref”传递...不确定在这种情况下您会得到什么结果。

标签: pass-by-reference pseudocode


【解决方案1】:

关于您在此问题后提出的问题 -

实际上,在极少数情况下可能会出现问题,但这取决于您如何为数字分配空间和您的编码语言。考虑一下。您将数据类型明确命名为 int,如果接受的输入是一个大于 int 可以处理的数字(或负数)怎么办,最终是 x 个整数,然后您将其乘以相同的数字,您分配的空间(通常具有整数填充)也可能没有足够的空间,对于这个特定实例来说太小,这将导致 C 中的分段错误。取决于您使用的语言,它是否比 C 更高级别,它可能会针对这种情况进行编译检查,但并非总是如此。

【讨论】:

    【解决方案2】:

    如果您要问的话,不会有不寻常的副作用。语言规范规定了特定的执行顺序(number * number 被评估,然后设置为 number),这可以防止任何问题的发生。

    【讨论】:

      【解决方案3】:

      在您的特定伪代码中不会发生任何事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        • 2022-06-28
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        相关资源
        最近更新 更多