[C]%p和%02x含义

   前言:

      嘿嘿,已经很久没有写博客了,最近有一些新收获得赶紧写下来。

      今天上了计算机组成原理的实验课,不过这种实验课真的太划水了,还是的课下自己搞。

  • %p的含义

    “%p”中的p是pointer(指针)的缩写,指针的值是一个表示地址空间中某个存储器单元的整数。

    printf函数族中对于%p一般以十六进制整数方式输出指针的值。

 1 #include <stdio.h>
 2 
 3 typedef unsigned char *byte_pointer;
 4 
 5 void showBytes(byte_pointer start, int len) {
 6     int i;
 7     printf("Address HexValue\n");
 8     for (i=0; i<len; i++)
 9         printf("%p %02x\n", start +i,start[i]);
10 }
11 
12 int main(void){
13     int a = 100;
14     short b = 100;
15 
16     printf("int a = %d, 字节数: %d\n", a, sizeof(a));
17     showBytes((byte_pointer) &a,sizeof(a));
18 
19     printf("int b = %d, 字节数: %d\n", b, sizeof(b));
20     showBytes((byte_pointer) &b,sizeof(b));
21 
22     return 0;
23 }

  输出为:

所以,%p的实质即为将所指向的数据地址以十六进制的形式输出。

注意:对于指针来说%p的打印的为所指向的数据地址。指针自己的实际地址 &p,用%p来打印。

1 int main(){
2     int *p = &a;
3     printf("%p\n", p);
4     printf("%p\n", &p);
5     return 0;
6 }

(省略了头文件,懂意思就行)

  • %02x含义

     x代表以十六进制形式输出,02代表不足两位,前面补0输出,右对齐如果超过两位,则以实际输出。

猜你喜欢

转载自www.cnblogs.com/xzzheng/p/10726945.html