为什么输出是这样?
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
我知道 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