我知道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问题的其中一个问题,我只是想了解这段代码中发生的事情!我没有写这段代码!
答案 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)
这些都没有任何意义。您正在声明但未初始化未定义行为的变量。
最重要的是,您使用错误的格式说明符打印它们,这也是未定义的行为。
为什么输出如此?
因为您滥用语言,因此可能会发生任何事情。它可能会因段错误而崩溃。它可以打印不同的垃圾值。它全都未定义。