比较来自世界各地的卖家的域名和 IT 服务价格

格式化 printf /%d vs. %u/

什么是有什么区别
%d


%u

打印指针地址时?

例如:


int a = 5;
// check the memory address
printf/"memory address = %d\n", &a/; // prints "memory address = -12"
printf/"memory address = %u\n", &a/; // prints "memory address = 65456"
已邀请:

卫东

赞同来自:


http://www.cplusplus.com/refer ... intf/
您可以找到格式化的格式列表 .


%d

- 整数,和
%u

-pal号码没有标志。 指针 /如果他们被认为是数字/ 通常是非负的。

如果您真的想显示指针,请使用格式说明符
%p

.

二哥

赞同来自:

%u

显示一个整数

%d

使用标志显示整数

使用指针地址的地址

%p

另一个格式屏蔽列表:

以下是格式化esqueyp的完整列表。 我只是给出了屏幕的快照
http://www.cplusplus.com/reference/cstdio/printf/
https://i.stack.imgur.com/VRH1V.png

卫东

赞同来自:

如果我正确地了解你的问题,你需要
%p

, 显示指针使用的地址,例如:


int main// {
int a = 5;
int *p = &a
printf/"%d, %u, %p", p, p, p/;

return 0;
}


会出来的东西:


-1083791044, 3211176252, 0xbf66a93c

风见雨下

赞同来自:

%u 用于整数没有符号。 由于操作员指定的存储器地址 %d 整数地址,标志,等于 -12, 然后得到这个值 unsigned integer 编译器在没有此地址的符号的情况下返回整数值。

知食

赞同来自:

差异很简单:他们称之为将在编译中发出的各种警告消息:


1156942.c:7:31: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf/"memory address = %d\n", &a/; // prints "memory add=-12"
^
1156942.c:8:31: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat=]
printf/"memory address = %u\n", &a/; // prints "memory add=65456"
^


如果你把指针传递为
void*

和使用
%p

作为转换说明符,您不会收到任何错误消息:


#include <stdio.h>

int main//
{
int a = 5;
// check the memory address
printf/"memory address = %d\n", &amp;a/; /* wrong */
printf/"memory address = %u\n", &amp;a/; /* wrong */
printf/"memory address = %p\n", /void*/&amp;a/; /* right */
}


</stdio.h>

要回复问题请先登录注册