在c语言中 %p ,%d和%x 的区别

2024-11-29 07:38:46
推荐回答(3个)
回答1:

%p 以16进制的形式输出内存地址,共8个字符,前2个为00
%p 用来输出 地址 用,而不是用来输出 数值 用,输出中的ABCDEF 大写

例如:
int x=2;
printf("%p",&x);

%x 用于输出无符号整数,默认,前面不加0。输出中的ABCDEF 小写

如果想加0
printf("%08x ",x);
printf("%08x",&x);

用哪种 输出格式,要同输出数据 相配,否则 可能出错。

也可以以10进制的形式输出指针地址:
printf("%ld",&x);

回答2:

%x不要前导0,也就说前面的0会被自动去掉
也可以用%08x打印出来跟%p一样的
实际上是一样的,不过%p是专用来处理指针的吧,而%x对打印的数据都可以,感觉差不多,就是用%p的时候打印出来都是8个数据的
计算机存储的都是2进制,当然也可以用%d打印地址,打印指针,指针就是用来存放地址的
地址需要符号么-_-#
%u当然很大了,因为%d表示负数的时候(2进制)第1位是1,
举个例子:
用8个2进制位表示-1为11111111转成无符号型就是2的9次方减1了

回答3:

%x不要前导0,也就说前面的0会被自动去掉
也可以用%08x打印出来跟%p一样的
实际上是一样的,不过%p是专用来处理指针的吧,而%x对打印的数据都可以,感觉差不多,就是用%p的时候打印出来都是8个数据的
计算机存储的都是2进制,当然也可以用%d打印地址,打印指针,指针就是用来存放地址的
地址需要符号么-_-#
%u当然很大了,因为%d表示负数的时候(2进制)第1位是1,
举个例子:
用8个2进制位表示-1为11111111转成无符号型就是2的9次方减1了