前言:
嘿嘿,已经很久没有写博客了,最近有一些新收获得赶紧写下来。
今天上了计算机组成原理的实验课,不过这种实验课真的太划水了,还是的课下自己搞。
“%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 }
(省略了头文件,懂意思就行)
x代表以十六进制形式输出,02代表不足两位,前面补0输出,右对齐,如果超过两位,则以实际输出。
原文:https://www.cnblogs.com/xzzheng/p/10726945.html