打印整数值时出现意外输出
Unexpected output when printing the value of an integer
#include<stdio.h>
void main()
{
int i = 5;
printf("%p",i);
}
我尝试在 Linux 上使用 GCC 编译器编译此程序,该编译器在编译程序时发出警告说
%p expects a void* pointer
运行时输出 46600x3。
但是当我使用站点 codingground.tutorialspoint.com 在线编译它时,我得到了一个输出
等于 0x5
即十六进制输出,谁能解释一下原因?
printf("%p",i);
使用错误的格式说明符将导致未定义的行为。 %p
期望类型 void *
的争论在你的情况下你传递的是 i
的值而不是地址,以便打印出你应该传递的地址 &i
你应该使用
printf("%d",i);
打印i
的整数值
代码应该是这样的
#include<stdio.h>
void main()
{
int i = 5;
printf("%d",i); /* To print value of i */
printf("%p",(void *)&i); /* Address of variable i */
}
%p
期望某物(或指针)的地址。您提供变量 i
的值而不是地址。使用
printf("%p",(void*)&i);
而不是
printf("%p",i);
并且 GCC 将在没有警告的情况下编译程序,并且当您 运行 时它会打印存储 i
的地址。符号 (&
) 是寻址运算符,它给出了变量的地址。强制转换也是必需的,因为格式说明符 %p
需要一个类型为 void*
的参数,而 &i
是类型 int*
。
如果要打印变量的值,使用
printf("%d",i);
使用错误的格式说明符将导致UB(Undefined Behavior)
#include<stdio.h>
void main()
{
int i = 5;
printf("%p",i);
}
我尝试在 Linux 上使用 GCC 编译器编译此程序,该编译器在编译程序时发出警告说
%p expects a void* pointer
运行时输出 46600x3。
但是当我使用站点 codingground.tutorialspoint.com 在线编译它时,我得到了一个输出
等于 0x5
即十六进制输出,谁能解释一下原因?
printf("%p",i);
使用错误的格式说明符将导致未定义的行为。 %p
期望类型 void *
的争论在你的情况下你传递的是 i
的值而不是地址,以便打印出你应该传递的地址 &i
你应该使用
printf("%d",i);
打印i
代码应该是这样的
#include<stdio.h>
void main()
{
int i = 5;
printf("%d",i); /* To print value of i */
printf("%p",(void *)&i); /* Address of variable i */
}
%p
期望某物(或指针)的地址。您提供变量 i
的值而不是地址。使用
printf("%p",(void*)&i);
而不是
printf("%p",i);
并且 GCC 将在没有警告的情况下编译程序,并且当您 运行 时它会打印存储 i
的地址。符号 (&
) 是寻址运算符,它给出了变量的地址。强制转换也是必需的,因为格式说明符 %p
需要一个类型为 void*
的参数,而 &i
是类型 int*
。
如果要打印变量的值,使用
printf("%d",i);
使用错误的格式说明符将导致UB(Undefined Behavior)