【问题标题】:Unrecognized behaviour of Pointers无法识别的指针行为
【发布时间】:2015-11-04 20:20:43
【问题描述】:
#include<stdio.h>
int main() {
  char str[]={'1','2','3'},*p;
  p=str;
  printf("%c",p);
  return 0;
}

输出-@。

不应该是打印 1 还是 %c 可能是原因?

【问题讨论】:

  • 它将打印str 地址转换为char 的字符表示。就是这样。
  • p 指的是指针,即它的内存地址。您应该取消引用它以获取它所指向的内容:*p
  • 好的,如果我使用 %s 那么它会打印 123 对吗???
  • @EugeneSh.:实际上,由于printf() 是可变参数,当参数类型不匹配时,行为是未定义的(存在一些例外,但char */int 没有)。
  • @EOF,好吧,还没有那么深:)

标签: c pointers printf


【解决方案1】:

要打印指针的值(即 1,正如您所期望的),您必须取消引用该指针。在你的情况下,

printf("%c",p);

应该是

printf("%c", *p);

FWIW,printf("%c",p); 将调用未定义的行为,因为提供的参数类型将与提供的格式说明符不匹配。

【讨论】:

    【解决方案2】:

    p 是一个指针。

    你想要printf("%c",*p);

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2016-08-12
      相关资源
      最近更新 更多