读书人

printf(quot; %p\nquot;)解决办法

发布时间: 2012-08-09 15:59:21 作者: rapoo

printf(" %p\n")

C/C++ code
#include <stdio.h>int main(void){    int x;    int *p1,*p2;    p1 = &x;    p2 = p1;    printf(" %p\n",p2); /* print the address of x,not x's value */    return 0;}

刚刚才知道还有个printf("%p")是输出变量的地址。以前怎么就没有看到过呢??

[解决办法]
printf参数就是挺多了,我也是不少都没用过,呵呵
C/C++ code
%a                浮点数、十六进制数字和p-记数法(C99)%A    浮点数、十六进制数字和p-记法(C99)%c    一个字符 %d    有符号十进制整数 %e    浮点数、e-记数法%E    浮点数、E-记数法%f    浮点数、十进制记数法  %g    根据数值不同自动选择%f或%e.%G    根据数值不同自动选择%f或%e.%i               有符号十进制数(与%d相同)%o    无符号八进制整数%p    指针    %s    字符串%u    无符号十进制整数%x    使用十六进制数字0f的无符号十六进制整数 %X    使用十六进制数字0f的无符号十六进制整数%%    打印一个百分号
[解决办法]
C/C++ code
#include <stdio.h>int main(){    int i = 10;    printf("%0X\t%p\n",&i,&i);    return 0;}//输出:22FF74  0022FF74Process returned 0 (0x0)   execution time : 0.000 sPress any key to continue.
[解决办法]
printf(" %p\n",p2);
就是把p2的内容当成是指针(地址)来输出,不是输出p2的地址,实际上与输出十六进制格式差不多。
[解决办法]
知道就好,不过这个确实用的不多
[解决办法]
恩,学习一下
回复内容太短了!
[解决办法]
想看地址值,用%d输出指针也可以。
[解决办法]
任何变量都有地址,变量名指向它的内容(指针的内容是地址或者非指针类型内容可能是char int等),取地址一般得加&,可以通过%p打印出来,而指针特殊在他本身内容是地址,为此,打印%p的时候呢,如没有加&是打印的指针的内容(存的地址),而按照区地址一般加&的原则来打印指针的时候呢,打印的是指针的地址而不是其内容地址。
实践:
C/C++ code
#include <stdlib.h> #include <stdio.h>int main(void){    int a=8;    int *p;    int *p2;    printf("%p\n",&a);    p=&a;    printf("%p\n",p);    printf("%p\n",*p);    p2 = p;    printf("%p\n",p2);    printf("%p\n",p2);    printf("p=%p\n",&p);    printf("p2=%p\n",&p2);    printf("%d\n",*p2);        return 0;}
[解决办法]
探讨
恩,学习一下
回复内容太短了!

[解决办法]
学习学习学习了~~~~~
[解决办法]
探讨
任何变量都有地址,变量名指向它的内容(指针的内容是地址或者非指针类型内容可能是char int等),取地址一般得加&,可以通过%p打印出来,而指针特殊在他本身内容是地址,为此,打印%p的时候呢,如没有加&是打印的指针的内容(存的地址),而按照区地址一般加&的原则来打印指针的时候呢,打印的是指针的地址而不是其内容地址。
实践:
C/C++ code
#include<stdlib.h>
#include<stdio.h>int main(void)
{int a=8;int*p;int*p2;
printf("%p\n",&a);
p=&a;
printf("%p\n",p);
printf("%p\n",*p);
p2= p;
printf("%p\n",p2);
printf("%p\n",p2);
printf("p=%p\n",&p);
printf("p2=%p\n",&p2);
printf("%d\n",*p2);return0;
}
问:如果想打印p指针本身的地址,如何弄?
答:printf("%p",&p);
问:p2=p是如何赋值的?
答:p的指针内容(里面存的是个地址)赋给p2。
问:p,p2存储的内容(地址)相同,它们两个的地址相同?
答:不同,可以通过打印他们的地址:printf("%p",&p); printf("%p",&p2); 来对比一下。

------解决方案--------------------


C/C++ code
//这样理解的吧;#include <stdlib.h> #include <stdio.h>int main(void){    int a=8;    int *p;    int *p2;    printf("a  value  :%p\n",&a);//a的地址     p=&a;    printf("p  value  :%p\n",p);//把p的值按地址打印,p的是a地址     printf("%p\n",*p);//p指向的值 按地址打印     p2 = p;    printf("p2 value  :%p\n",p2);//把p2的值按地址打印,p的是a地址     printf("p  address:%p\n",&p);//变量p自己的地址     printf("p2 address:%p\n",&p2);//变量p2自己的地址    printf("%p\n",*p2);        return 0;}
[解决办法]
深刻学习中!~
望今后多见一些能学习的帖子,少一些看不懂的帖子!~
哈哈。。。
[解决办法]
出某些log文件时会用到。
[解决办法]
printf函数也有很大学问啊
[解决办法]
这个我常用。。。。。。
[解决办法]
好东西哦~~~谢谢分享~~~感谢了!!!!!!!!
[解决办法]
还有个挺好用的,如输出"0x123456"这个地址
C/C++ code
printf("%#x\n", 0x123456); // %#: 0x
[解决办法]
噢,学到东西了~~~

读书人网 >C语言

热点推荐