【问题标题】:Incrementing a double pointer in C [duplicate]在C中增加一个双指针[重复]
【发布时间】:2016-11-17 02:56:02
【问题描述】:

这是在面试中被要求预测输出的程序

  main()
  {
     char **p = 0;
     printf("%d\n", ++p);
  }

你能告诉我为什么答案是 4 吗?

【问题讨论】:

  • 我希望你批评代码要么不包括显式返回类型int(C99 或 C11 需要),要么省略 return 0;(基本上 C89 需要,否则返回值from the program 是不确定的,但你可以在 C99 或 C11 中从 main() 的末尾省略它,结果就像你写了 return 0;,尽管 IMO 仍然最好包含它)。跨度>

标签: c


【解决方案1】:

一个 char 占用 1 个字节,但指向该 char 的指针占用 4 个字节(一个 int32)。所以,p 实际上是一个指向 int 的指针。当您增加一个指针时,它会向前移动基础数据类型的字节数。所以,p 向前移动了 4 个字节。

【讨论】:

    【解决方案2】:

    char 的大小为 1 个字节,但指针(32 位代码)的大小为 4 个字节。双指针意味着你指向 at 四个字节的数量,因此

    p ++
    

    将指针前进四个字节(假设是下一个char *),因此printf 的输出为4。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2013-03-31
      • 2018-05-27
      • 1970-01-01
      相关资源
      最近更新 更多