为什么打印的价值是25?不应该是内存位置值?

时间:2012-02-23 08:43:20

标签: c

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

void main()

{

      int  const * p=5;

      printf("%d",++(*p));

}

答案:25

3 个答案:

答案 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?