将地址赋值给整型变量
Assignment of address to integer variable
为什么你可以像这样给一个整数变量分配地址,编译器不会给出错误。我一直认为你只能将整数值赋给整型变量
int a=0x28ff1c
对于char变量也可以这样做,编译器不会给出错误
char b=0x28ff1c
它将在控制台屏幕上输出char b的垃圾值和int a的随机值
cout<<b
<<endl;
cout<<a;
谁能给我解释一下为什么char b和int a的输出有区别?谁能解释一下为什么一个字符变量和整数变量可以有地址分配给它
0x28ff1c
本身并不是地址,它只是一个十六进制数。
下面是等价的:
int a = 2686748; //decimal number
int a = 0x28ff1c; //hexadecimal number
int a = 012177434; //octal number
地址是由指针表示的——如果只是一个地址,你可以使用void*
:
void* p = (void*)0x28ff1c;
In which case
int a = p;
不会编译。p
是一个地址,数字本身不是。
数字0x28ff1c
只是十六进制(以16为基数)表示十进制(以10为基数)数字2686748
。由于cout
默认为整数打印十进制值,这可能是您打印的数字。
char b = 0x28ff1c
的情况略有不同,因为
-
char
不够大,无法容纳该值。实际结果是它被截断为0x1c
。 -
cout
特别对待char
,因为它通常用于保存文本数据,所以cout
打印代码为0x1c
的字符,这是某种控制字符。您可以尝试用0x41
为例(它表示'A'
在ASCII和UTF-8)。
请注意,没有任何标记0x28ff1c
作为地址。地址由&a
或(void*)0x28ff1c
组成。
因为在任何文字中,0x实际上是一个整数。所以这是允许的。地址有时可以是整数
您也可以使用*(int *)(Address) = value
作为构造将value
分配给Address
,并使用@Luchian Grigore的答案
相关文章:
- 为"adjacent"变量赋值时出现问题
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 如何在不使用赋值运算符的情况下为动态变量赋值?
- 为什么我不能为变量赋值函数?
- 可视化的c++变量赋值使代码正常工作
- 如何为结构类型变量赋值
- 使用 boost python 从 c++ 为 python 中的类成员变量赋值
- 将字符串中以十六进制形式存储的负长整型值转换为 C++ 中的长整型变量
- QT变量赋值,<没有这样的值>,SIGSEGV
- C++:为全局类变量赋值
- 从类外部为类中的变量赋值
- 在 c++ 中为字符串变量赋值
- 为类中的私有静态变量赋值
- 使用类为变量赋值 (C++)
- 在sparcsolaris上使用gcc为长整型整数赋值
- 对整型变量的双精度值-意外输出
- 整型变量不能存储大的值
- 将地址赋值给整型变量
- 整型变量赋值的差异