为什么printf(i)在这个程序中给出0作为输出?

时间:2015-08-25 13:30:59

标签: c printf

#include <stdio.h>

int main()
{
  int i=-1;
  !i;
  printf(i);
}

输出:

  

0

为什么输出为零

2 个答案:

答案 0 :(得分:4)

在您的代码中,

 printf(i);

无效,因为printf()期望const char *作为第一个参数,而您传递的是int。它调用undefined behaviour

调高编译器警告。打开基本警告级别后,您应该在行

处获得一些消息
  

警告:传递'printf'的参数1会使整数指针不带强制转换

解决方案:我相信,您想要的

printf("%d\n", i);

答案 1 :(得分:2)

首先是如何编译的?即使你有输出!!

printf(i); 

printf格式 - int printf(const char * format,...);

所需的第一个参数是const char*,您传递的是int。 这句话不正确。在编译器中使用已启用的警告进行编译时,您会看到。

正确的语法是 -

printf("%d",i);

即使您更正了printf语句,也不会将0作为输出。

!i;

这应该写成 -

i=!i;

See here.