关于C语言中%p和%X的思考

  • 说白了,(%A)仅仅代表以何种格式显示所要显示的数据,具体何种格式如下:
%d 有符号10进制整数 
%i 有符号10进制整数 
%o 无符号8进制整数 
%u 无符号10进制整数 
%x 无符号的16进制数字,并以小写abcdef表示
%X 无符号的16进制数字,并以大写ABCDEF表示
%F/f 浮点数 
%E/e 用科学表示格式的浮点数 
%g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数 
%c 单个字符 
%s 字符串
  • 所以%p是将所要显示的数据以地址指针格式输出,即如果是32位,以4字节十六进制格式输出,如果是64位,以8字节十六进制格式输出。而%X仅仅是将要显示的数据以十六进制格式输出,所以当地址做高位为0是会不显示,若想要显示显示为4字节,可以将格式设置为%08X。

以下为验证实例:

#include<stdio.h>

//test
#if 1
int main()
{
    int val = 10;
    int* add = &val;
    printf("val, &val, add的值分别为:%d 、%d、%d\n", val, &val, add);
    printf("val, &val, add的值分别为:%p 、%08X、%X\n", val, &val, add);
    return 0;
}
#endif

运行结果如下:

 

仔细观察以上对比结果,其中最重要的是Val的值,若以%d格式输出为10;以%p格式输出为0000 000A 。相信有一点基础的人都可以很轻松的明白其中端倪。

猜你喜欢

转载自www.cnblogs.com/lixuejian/p/10797039.html