为什么输出是这样?

Why is the output so?

我知道 unsigned int* 和 int* 不兼容。但是由于 i,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题中的一道题,我只是想弄明白这段代码到底发生了什么!!这段代码不是我写的!

None 这句话说得通。您正在声明但未初始化变量,这是未定义的行为。

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

Why is the output so?

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

如评论中所述,您在使用未初始化的变量时会出现未定义的行为,因此可以打印任何内容(否则程序可能会崩溃)。

因此请确保在使用变量之前对其进行初始化。

您还应该使用 %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