首页
社区
课程
招聘
[旧帖] [求助]c++给位大牛个点解释,为什么这样? 0.00雪花
发表于: 2012-3-10 22:35 1610

[旧帖] [求助]c++给位大牛个点解释,为什么这样? 0.00雪花

2012-3-10 22:35
1610
源代码:
#include<iostream>
#include<stdio.h>
using namespace std;
struct foo {
                        short a;
                        char b;
                        char c;
                        int d;
                        };
int main()
{
        foo f = {1234,
                        'x',
                        'y',
                        ('A' << 16) + ('B' << 8) + 'C'};
        cout
                <<&f.a<<'\n'
                <<&f.b<<'\n'
                <<&f.c<<'\n'
                <<&f.d<<endl;
return 0;
}

输出结果:
0012FF78
xyCBA
yCBA
0012FF7C

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1760
活跃值: (1616)
能力值: ( LV12,RANK:222 )
在线值:
发帖
回帖
粉丝
2
我电脑上是:
0x28ff40
xyCBA
yCBA
0x28ff44

======================
&f.a 的意思是从a这个地址取数据吧,这个地址应该在不同的电脑上就不同了。
&f.d 类似

当然 &f.d - &f.a = short + char + char = 4

而char取地址就变成char*了。

结构体foo的内容依次为
{
1234
'x'
'y'
'CBA'0    这个是因为int是4个字节,小端存放。
}
所以答案就是这个样了= =

我蒙的。
2012-3-10 23:04
0
雪    币: 66
活跃值: (49)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
我知道了 在这里个大家说说我的收获
但是不知道是不是正确的解释
由于是 short 和 int类型
所以 a 和 d 直接转义成地址了
而 b 和 c  是 char 所以转义成 const void * 这样就输出内存里面的东西

&f.b 和 &f.c 输出的位数是相同的
xyCBA
yCBA'\0'
那个'\0'是隐藏的 咱都不知道
2012-3-10 23:43
0
雪    币: 238
活跃值: (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
C++的优先级中,成员运算符的级别是第二高的,所以这里的&f.a实际上是&(f.a),取的是变量地址。
2012-3-11 00:04
0
雪    币: 182
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
当char*处理了,遇到'\0'结束,等同于char *lpbuffer = "Hello,World!"; cout << lpbuffer << endl;
<<在重载的时候后面是一个地址量,我估计他把他当成下面的形式了
ostream operator<<(char *) //用于向输出流插入一个字符串数据
2012-3-11 00:10
0
游客
登录 | 注册 方可回帖
返回
//