5

怎么能像这样给整型变量赋值,编译器不会报错。我总是虽然你只能将整数值分配给整数变量

int a=0x28ff1c

您可以对 char 变量执行相同的操作,编译器不会给出错误

char b=0x28ff1c

它将在控制台屏幕上输出 char b 的垃圾值和 int a 的随机值

cout<<b
    <<endl;
cout<<a;

有人可以向我解释为什么 char b 和 int a 的输出存在差异。有人可以向我解释为什么char变量和整数变量可以分配地址吗

4

4 回答 4

8

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是地址,数字本身不是。

于 2012-12-30T13:44:56.433 回答
5

该数字0x28ff1c只是十进制(base-10)数字的十六进制(base-16)表示2686748。默认情况下打印整数的十进制值,这cout可能是您打印的数字。

情况char b = 0x28ff1c略有不同,因为

  1. char不足以容纳该值。实际结果是它被截断为0x1c.
  2. cout特殊对待char,因为它通常用于保存文本数据,所以cout打印带有代码的字符0x1c,这是某种控制字符。例如,您可以尝试使用它0x41'A'以 ASCII 和 UTF-8 表示)。

请注意,没有任何东西可以标记0x28ff1c为地址。地址将由&a或组成(void*)0x28ff1c

于 2012-12-30T13:54:46.143 回答
1

因为在任何以 0x 开头的文字中实际上都是一个整数。所以是允许的。地址有时可以是整数。

于 2012-12-30T13:45:52.543 回答
0

您还可以*(int *)(Address) = value用作构造来分配 avalueAddress使用@Luchian Grigore 的答案

于 2012-12-30T14:15:38.520 回答