Com*_*erd 5 c++ variables memory-address
为什么你可以为这样的整数变量分配地址,编译器不会给出错误.我总是只能将整数值分配给整数变量
int a=0x28ff1c
Run Code Online (Sandbox Code Playgroud)
您可以对char变量执行相同操作,编译器不会给出错误
char b=0x28ff1c
Run Code Online (Sandbox Code Playgroud)
它将在控制台屏幕上输出char b的垃圾值和int a的随机值
cout<<b
<<endl;
cout<<a;
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么char b和int a的输出存在差异.有人可以向我解释为什么char变量和整数变量可以分配地址
0x28ff1c 不是地址本身 - 它只是一个十六进制数.
以下是等效的:
int a = 2686748; //decimal number
int a = 0x28ff1c; //hexadecimal number
int a = 012177434; //octal number
Run Code Online (Sandbox Code Playgroud)
地址由指针表示 - 如果它只是一个地址,你可以使用void*:
void* p = (void*)0x28ff1c;
Run Code Online (Sandbox Code Playgroud)
在这种情况下
int a = p;
Run Code Online (Sandbox Code Playgroud)
不会编译.p是一个地址,数字本身不是.
该数字0x28ff1c只是十进制(base-10)数字的十六进制(base-16)表示2686748.至于cout默认为整数打印十进制值,这可能是你得到的印刷数量.
案例char b = 0x28ff1c略有不同,因为
char不足以保持这个价值.实际结果是它被截断为0x1c.coutchar特别对待,因为它通常用于保存文本数据,所以cout打印出具有代码的字符0x1c,这是某种控制字符.你可以试试它0x41(例如'A'用ASCII和UTF-8表示).请注意,没有任何标记0x28ff1c为地址.地址将由&a或形成(void*)0x28ff1c.
| 归档时间: |
|
| 查看次数: |
2876 次 |
| 最近记录: |