【问题标题】:why is the value printed is 25 ? shouldn't that be a memory location value ?为什么打印的值是 25 ?那不应该是内存位置值吗?
【发布时间】:2012-03-13 15:44:35
【问题描述】:

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

void main()

{

      int  const * p=5;

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

}

答案:25

【问题讨论】:

    标签: c


    【解决方案1】:

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

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

    【讨论】:

    • 我认为它是一个 const 指针,所以在目标处递增值应该没问题。
    • 它是int const *,而不是const int *++p 是非法的,而不是++*p
    • @CAFxX: int const *const int * 是一回事。
    • @drhirsch:那就是int *const p
    • int const * == const int *... 你的意思是int * const, const 可以放在任何一边,但为了避免混淆,它应该总是放在类型的右边,并且从右到左读取常量.
    【解决方案2】:

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

    【讨论】:

    • C 中不需要类型转换
    • 我同意这一点,但是再次将整数分配给指针肯定不是“正确的”。
    【解决方案3】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多