返回信息流int _tmain(int argc, _TCHAR* argv[])
{
int a=1;
char *b=(char *)&a;
cout<<b<<endl; //输出不是1
cout<<&b<<endl; //输出0012F858
printf("%x\n",*b); //输出1
printf("%x\n",b); //输出0012F864
system("PAUSE");
return 0;
}
为什么cout输出的b的地址和printf输出的b[/size]的地址不一样??[em9]
这是一条镜像帖。来源:北邮人论坛 / cpp / #72264同步于 2013/7/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教大神们一个问题~~~关于cout和printf
dreamstage
2013/7/2镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
printf("%x\n",b); //输出0012F864
这行没写错吗?输出地址得加个&
【 在 dreamstage 的大作中提到: 】
: int _tmain(int argc, _TCHAR* argv[])
: {
: int a=1;
: ...................
要想用cout输出b的指针值,不能cout<<b,得这样作 cout<<static_cast<void*>(b);这样结果就和printf("%x",b)一样了,至于cout<<&b相当于printf("%p",&b),
cout<<b,而b是char*,那么会将b认为是一个指向字符串的指针处理,而b并不指向字符串。所以什么结果都有可能。
cout<<&b,这输出的是b这个变量在内存中的地址。这没错。
你printf里是%x,后面却跟着一个char型(*b),这本身就是错误的。这种情况输出任何东西都有可能。不是所有的机器上都会输出1。
同样printf里是%x,后面却跟着一个char*型(b),这也是错误的。这种情况输出任何东西都有可能。这里碰巧你的指针和int一样长,帮你按16进制输出了,运气好,但正确的应该用%p。
printf后面的参数,c语言不会自动帮你转换类型。所以必须匹配第一个参数里的标记,%x是int,%c是char,%p是指针。注意指针的长度不一定等于int的长度。比如在64位机上,int是32位的,而指针是64位的。
我的理解是,cout和printf对于字符串的处理一样,如果变量为char指针,则会从起始地址按序输出,知道遇到空字符结尾。
a的最低B是1,其他三个B是0,相当于空字符了。所以打印一个(char)1,然后就没了。
求验证。
【 在 nuanyangyang 的大作中提到: 】
: cout<<b,而b是char*,那么会将b认为是一个指向字符串的指针处理,而b并不指向字符串。所以什么结果都有可能。
: cout<<&b,这输出的是b这个变量在内存中的地址。这没错。
: 你printf里是%x,后面却跟着一个char型(*b),这本身就是错误的。这种情况输出任何东西都有可能。不是所有的机器上都会输出1。
: ...................
嗯。是这么回事。如果是小端模式(little endian)的话。
p.s. 又想起这个程序:
// 请用VC6.0以debug模式编译运行
char str[32];
printf("我说:我放不下一些事,放不下一些人。他说:没有什么东西是放不下的。我说:可我偏偏放不下。他说:你不是喜欢喝茶吗,就递我一个茶杯然后往里面倒热水,一直倒到热水溢出来。我连忙松手并大喊:%s!",str);
【 在 a206206 的大作中提到: 】
: 我的理解是,cout和printf对于字符串的处理一样,如果变量为char指针,则会从起始地址按序输出,知道遇到空字符结尾。
: a的最低B是1,其他三个B是0,相当于空字符了。所以打印一个(char)1,然后就没了。
: 求验证。
: ...................
在powerPC工作平台的苦逼向亲们致敬!噗~
【 在 a206206 的大作中提到: 】
: 我的理解是,cout和printf对于字符串的处理一样,如果变量为char指针,则会从起始地址按序输出,知道遇到空字符结尾。
: a的最低B是1,其他三个B是0,相当于空字符了。所以打印一个(char)1,然后就没了。
: 求验证。
: ...................
【 在 nuanyangyang 的大作中提到: 】
: 嗯。是这么回事。如果是小端模式(little endian)的话。
: p.s. 又想起这个程序:
: [code=c]
: ...................
亲,这是什么样的环境呢?苹果都改用x86做个人电脑了。
【 在 tonyjansan 的大作中提到: 】
: 在powerPC工作平台的苦逼向亲们致敬!噗~
:
图形化处理的一个平台~苹果和摩托虽然萎了~但目测IBM还是坚挺的~虽然受到ARM十分强有力的冲击~
要不是看重它低功耗、较高稳定性的特点估计早就废了~不过看这个样子过不久也要换了~
【 在 nuanyangyang 的大作中提到: 】
: 亲,这是什么样的环境呢?苹果都改用x86做个人电脑了。
: