我正在使用c谜题,并遇到了这个问题。 在这里,一个at printf语句指针增加一次,所以我认为它将指向随机数! 但我不明白为什么25是输出? 谁有人可以帮我理解? 非常感谢提前;)
void main()
{
int const * p=5;
printf("%d",++(*p));
}
答案:25
答案 0 :(得分:6)
你 指向一块随机内存(地址5)。然后,您将增加存储在那里的任何内容,并打印结果。这是未定义的行为;你的程序可以做任何事情。
UPDATE:实际上,这段代码甚至不应该编译。您已将其声明为指向const
的指针,因此编译器不应让您递增。你使用什么编译器?
答案 1 :(得分:1)
你要做的是错的。它从没有强制转换的整数形成一个指针。同样,你的声明使p
指向一个常量整数,你不能增加指针p
指向的值。它也是值,而不是在printf
语句中递增的指针。
答案 2 :(得分:0)
每当我们为指针分配一个常量时,它应该像int const * p=(unsigned int*)5
。如果幸运的话,5会在您程序的地址空间中。如果没有,那么你会得到一个seg错误。这就是为什么它是未定义的行为。检查这一点以获取有关int const,const int等的更多详细信息。const int = int const?