printf(" %p\n")

chaoliu1024 2010-02-18 10:15:01
#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")是输出变量的地址。以前怎么就没有看到过呢??
...全文
5459 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
aFrancisco 2012-07-07
  • 打赏
  • 举报
回复
还是有点模糊啊
endless_love123 2011-10-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jernymy 的回复:]
还有个挺好用的,如输出"0x123456"这个地址

C/C++ code


printf("%#x\n", 0x123456); // %#: 0x
[/Quote]

它就是以十六进制数出, 然后在前面加个前缀0x
nakedavril 2011-06-02
  • 打赏
  • 举报
回复
学些了,mark
danisein 2010-02-20
  • 打赏
  • 举报
回复
噢,学到东西了~~~
jernymy 2010-02-20
  • 打赏
  • 举报
回复
还有个挺好用的,如输出"0x123456"这个地址

printf("%#x\n", 0x123456); // %#: 0x
endless_love123 2010-02-20
  • 打赏
  • 举报
回复
好东西哦~~~谢谢分享~~~感谢了!!!!!!!!
traceless 2010-02-20
  • 打赏
  • 举报
回复
这个我常用。。。。。。
sharp1278 2010-02-20
  • 打赏
  • 举报
回复
printf函数也有很大学问啊
aozhi 2010-02-20
  • 打赏
  • 举报
回复
出某些log文件时会用到。
lwouyang 2010-02-19
  • 打赏
  • 举报
回复
printf(" %p\n",p2);
就是把p2的内容当成是指针(地址)来输出,不是输出p2的地址,实际上与输出十六进制格式差不多。
Ming-Zhe 2010-02-19
  • 打赏
  • 举报
回复
深刻学习中!~
望今后多见一些能学习的帖子,少一些看不懂的帖子!~
哈哈。。。
南气子水 2010-02-19
  • 打赏
  • 举报
回复

//这样理解的吧;
#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;
}
南气子水 2010-02-19
  • 打赏
  • 举报
回复
引用 7 楼 tang056 的回复:
任何变量都有地址,变量名指向它的内容(指针的内容是地址或者非指针类型内容可能是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); 来对比一下。

学习了,呵呵
东大坡居士 2010-02-19
  • 打赏
  • 举报
回复
学习学习学习了~~~~~
AAA20090987 2010-02-19
  • 打赏
  • 举报
回复
引用 5 楼 pang123hui 的回复:
恩,学习一下
回复内容太短了!


菜鸟学习了,顶一下
tang056 2010-02-19
  • 打赏
  • 举报
回复
任何变量都有地址,变量名指向它的内容(指针的内容是地址或者非指针类型内容可能是char int等),取地址一般得加&,可以通过%p打印出来,而指针特殊在他本身内容是地址,为此,打印%p的时候呢,如没有加&是打印的指针的内容(存的地址),而按照区地址一般加&的原则来打印指针的时候呢,打印的是指针的地址而不是其内容地址。
实践:

#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;
}

问:如果想打印p指针本身的地址,如何弄?
答:printf("%p",&p);
问:p2=p是如何赋值的?
答:p的指针内容(里面存的是个地址)赋给p2。
问:p,p2存储的内容(地址)相同,它们两个的地址相同?
答:不同,可以通过打印他们的地址:printf("%p",&p); printf("%p",&p2); 来对比一下。
bladesoft 2010-02-19
  • 打赏
  • 举报
回复
想看地址值,用%d输出指针也可以。
pang123hui 2010-02-19
  • 打赏
  • 举报
回复
恩,学习一下
回复内容太短了!
jixingzhong 2010-02-19
  • 打赏
  • 举报
回复
知道就好,不过这个确实用的不多
昵称很不好取 2010-02-18
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
int i = 10;
printf("%0X\t%p\n",&i,&i);
return 0;
}
//输出:
22FF74 0022FF74

Process returned 0 (0x0) execution time : 0.000 s
Press any key to continue.
加载更多回复(1)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧