为什么输出如此?

时间:2016-06-24 08:17:44

标签: c pointers int unsigned-integer

我知道unsigned int *和int *不兼容。但是因为我,j是int *(int指针),那么它们是如何使用无符号类型打印的。为什么它会输出0 !!

#include<stdio.h>
//#include<conio.h>
main()
{
  int *i,*j,**k;
  //i+2;
  k=&i;
  printf("\n*k=%u j=%u i=%u",*k,j,i);
  //getch();
}

输出:

*k=0 j=0 i=0

这是295 C问题的其中一个问题,我只是想了解这段代码中发生的事情!我没有写这段代码!

2 个答案:

答案 0 :(得分:2)

正如评论中已经说明的那样,当您使用未初始化的变量时,您会有未定义的行为,因此可以打印任何内容(或者程序可能会崩溃)。

因此,请确保在使用之前初始化变量。

此外,您应该使用%p

打印指针值
int main()
{
    int *i,*j,**k;

    // Initialize i, j and k
    int x = 42;
    i = &x;
    j = &x;
    k=&i;

    // Use i, j and k
    printf("\n*k=%p j=%p i=%p",(void*)*k, (void*)j, (void*)i);

    return 0;
}

示例输出:

*k=0xbfd9eb8c j=0xbfd9eb8c i=0xbfd9eb8c

答案 1 :(得分:1)

这些都没有任何意义。您正在声明但未初始化未定义行为的变量。

最重要的是,您使用错误的格式说明符打印它们,这也是未定义的行为。

  

为什么输出如此?

因为您滥用语言,因此可能会发生任何事情。它可能会因段错误而崩溃。它可以打印不同的垃圾值。它全都未定义。