在 C 中打印指针的值时出错

G0r*_*do1 1 c pointers

我不得不打印一个指针的值:

int *p = 0;
printf("%d", *p); 
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出异常。

所以我尝试了printf("%d", p),并且奏效了。

为什么它只在没有*?

Som*_*ude 5

当您取消引用指针p(as *p) 时,您取消引用一个空指针(您尝试获取p指向where 的值,但它实际上并未指向任何地方)。这会导致未定义的行为,并且通常会导致崩溃。

当您使用 plain 时,p您将打印指针变量本身的内容,而不是它指向的位置的值。但这也会导致未定义的行为,因为%d格式是打印一个int值,而不是一个int *值。不匹配的格式说明符和参数类型是 UB。

  • 只是为了补充答案:打印指针的正确格式说明符是“%p”,而不是“%d” (3认同)