gpt4 book ai didi

c - 格式说明符 : %u vs %d in C

转载 作者:行者123 更新时间:2023-12-05 09:27:05 24 4
gpt4 key购买 nike

#include<stdio.h>

int main(){
int a = 3;
printf("%u\n",&a);
printf("%d\n",&a);
return 0;
}

我试图打印变量“a”的地址。现在使用两种不同的格式说明符“%u”和“%d”,打印出两个不同的内存地址,我觉得这很奇怪。

所以我的问题是两种格式说明符之间有什么区别?

最佳答案

使用两个转换说明符输出一个地址会调用未定义的行为。

来自 C 标准(7.21.6.1 fprintf 函数)

9 If a conversion specification is invalid, the behavior isundefined.275) If any argument is not the correct type for thecorresponding conversion specification, the behavior is undefined.

相反,您应该使用转换说明符 p例如

printf( "%p\n", ( void * )&a );

另一种方法是使用整数类型 intptr_tuintptr_t在 header 中声明 <stdint.h>并使用说明符 PRIdPTRPRIuPTR或者,例如 PRIxPTR在 header 中声明 <inttypes.h>输出类型指针的赋值 void * .

这是一个演示程序。

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main( void )
{
int a = 3;
intptr_t p1 = ( intptr_t )( void * )&a;
uintptr_t p2 = ( uintptr_t )( void * )&a;

printf( "&a = %p\n", ( void * )&a );
printf( "&a = %"PRIdPTR "\n", p1 );
printf( "&a = %"PRIuPTR "\n", p2 );
printf( "&a = %#"PRIxPTR "\n", p2 );
}

程序输出为

&a = 0x7ffc220b16ec
&a = 140720879638252
&a = 140720879638252
&a = 0x7ffc220b16ec

关于c - 格式说明符 : %u vs %d in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72916015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com