为什么打印的值是 25 ?这不应该是一个内存位置值吗?

  • 本文关键字:位置 一个 内存 打印 不应该 c
  • 更新时间 :
  • 英文 :


我正在处理c谜题,遇到了这个问题。在这里,一个at printf语句中,指针会增加一次,所以我认为它会指向随机数!但我不明白为什么25是输出?有人能帮我理解吗?非常感谢;)

void main()
{
      int  const * p=5;
      printf("%d",++(*p));
}

答案:25

正在指向一段随机内存(地址5)。然后,您将递增存储在那里的任何内容,并打印结果。这是未定义的行为;你的程序可以做任何事情。

更新:实际上,这段代码甚至不应该编译。您已经将它声明为指向const的指针,因此编译器不应该让您递增。你在用什么编译器?

您试图做的是错误的。它从一个没有强制转换的整数中生成指针。此外,您的声明使p成为一个指向常量整数的指针,并且您不能递增指针p指向的值。此外,它是将在printf语句中递增的值,而不是指针。

每当我们将常量分配给指针时,它应该像int const * p=(unsigned int*)5一样。如果幸运的话,你的程序地址空间中会有5个。如果没有,那么你就有seg错误。这就是为什么它是未定义的行为。查看此项以了解有关int const、const int等的更多详细信息。const int=int const?

相关内容

最新更新