【问题标题】:Pointer Arithmetic (Not a question but kind of quiz) [closed]指针算术(不是问题,而是一种测验)[关闭]
【发布时间】:2011-04-20 12:56:16
【问题描述】:

这不是我要问的问题,但我在重构一些实验性代码时发现了这个问题,所以想把它贴在这里。

int *p = <assign some memory>
p[0] = 3;
int n = 24;

printf(" %d ", n/*p);

输出是什么?

【问题讨论】:

  • 看不到在 printf 未关闭和未关闭的多行注释的情况下如何编译。但是 24 如果你想注释掉 p。
  • 我猜你的意思是“n / *p”,我猜它应该会给出“8”。我也猜这不是你得到的,否则你不会问。
  • @Azodious: int *p = 3; 不应该在没有强制转换的情况下在 C++ 中编译。只有初始化为 0 才有效。
  • 它应该打印“8”。 ideone.com/cUScK
  • 对你来说只是一个旁白,但“怀疑”与“问题”并不相同。

标签: c++ c pointers programming-languages logic


【解决方案1】:
  1. 这会导致编译错误(/*p); 是注释的开头)
  2. 如果它像 printf(" %d ", n / *p); 它应该打印 8。

【讨论】:

    【解决方案2】:

    就像其他人所说的那样,您可能想要做的事情的答案是 8。下次您可能需要重新完成测验。

    int three = 3;
    int *p = &three;
    int n = 24;
    
    printf(" %d ", n / *p);
    

    【讨论】:

    【解决方案3】:

    假设您的意思是“n/(*p)”,它是合法的(如果该部分分配一个 int)。 "p[0] = 3" 将 3 放入单长数组 p 的唯一单元格中。所以“*p”可以被视为一个int,实际上是p[0](参见通常的数组算术)。所以这将打印 24/3 = 8。

    【讨论】:

      猜你喜欢
      • 2010-09-28
      • 2011-02-03
      • 2015-03-05
      • 2016-08-19
      • 1970-01-01
      • 2016-04-06
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多