sta*_*mer 4 c++ memory-address
我运行以下代码:
#include <iostream>
using namespace std;
typedef struct Test
{
char a;
char b;
int i;
double d;
}Test;
int main()
{
Test test;
test.a = 'a';
test.b = 'b';
test.i = 478;
test.d = 4.7;
cout << &test.a << '\n'
<< &test.b << '\n'
<< &test.i << '\n'
<< &test.d << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
ab@
b@
0x28fe94
0x28fe98
Run Code Online (Sandbox Code Playgroud)
起初,我认为这是&和之间优先的结果..
但是0x28fe94并0x28fe94指出它不是优先问题.
我可以找出什么是ab@和b@是什么意思?
当你写作
cout << &test.a
Run Code Online (Sandbox Code Playgroud)
因为test.a是a char,这将调用operator<< (ostream&, const char*)重载,认为你char*是一个指向C风格字符串的指针,而不是指向一个字符的指针.因此,操作将从内存地址开始读取字节,&test.a直到找到空终止符(零字节).打印输出会发生这种情况ab@,因为它a具有值'a',b有值'b',并且系统上的数字478恰好对应于@最后跟随空字节的字符.
如果你想看到的数字地址test.a和test.b,投的指针void*s,这将选择operator<< (ostream&, const void*)超载.例如:
cout << static_cast<void*>(&test.a)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |