我正在处理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?