怎么能像这样给整型变量赋值,编译器不会报错。我总是虽然你只能将整数值分配给整数变量
int a=0x28ff1c
您可以对 char 变量执行相同的操作,编译器不会给出错误
char b=0x28ff1c
它将在控制台屏幕上输出 char b 的垃圾值和 int a 的随机值
cout<<b
<<endl;
cout<<a;
有人可以向我解释为什么 char b 和 int a 的输出存在差异。有人可以向我解释为什么char变量和整数变量可以分配地址吗
怎么能像这样给整型变量赋值,编译器不会报错。我总是虽然你只能将整数值分配给整数变量
int a=0x28ff1c
您可以对 char 变量执行相同的操作,编译器不会给出错误
char b=0x28ff1c
它将在控制台屏幕上输出 char b 的垃圾值和 int a 的随机值
cout<<b
<<endl;
cout<<a;
有人可以向我解释为什么 char b 和 int a 的输出存在差异。有人可以向我解释为什么char变量和整数变量可以分配地址吗
0x28ff1c
不是地址本身 - 它只是一个十六进制数。
以下是等价的:
int a = 2686748; //decimal number
int a = 0x28ff1c; //hexadecimal number
int a = 012177434; //octal number
地址由指针表示 - 如果只是地址,您可以使用void*
:
void* p = (void*)0x28ff1c;
在这种情况下
int a = p;
不会编译。p
是地址,数字本身不是。
该数字0x28ff1c
只是十进制(base-10)数字的十六进制(base-16)表示2686748
。默认情况下打印整数的十进制值,这cout
可能是您打印的数字。
情况char b = 0x28ff1c
略有不同,因为
char
不足以容纳该值。实际结果是它被截断为0x1c
.cout
特殊对待char
,因为它通常用于保存文本数据,所以cout
打印带有代码的字符0x1c
,这是某种控制字符。例如,您可以尝试使用它0x41
('A'
以 ASCII 和 UTF-8 表示)。请注意,没有任何东西可以标记0x28ff1c
为地址。地址将由&a
或组成(void*)0x28ff1c
。
因为在任何以 0x 开头的文字中实际上都是一个整数。所以是允许的。地址有时可以是整数。
您还可以*(int *)(Address) = value
用作构造来分配 avalue
并Address
使用@Luchian Grigore 的答案