将地址分配给整数变量

时间:2012-12-30 13:44:03

标签: c++ variables memory-address

为什么你可以为这样的整数变量分配地址,编译器不会给出错误。我总是只能将整数值分配给整数变量

int a=0x28ff1c

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

char b=0x28ff1c

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

的随机值
cout<<b
    <<endl;
cout<<a;

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

4 个答案:

答案 0 :(得分: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是一个地址,数字本身不是。

答案 1 :(得分:5)

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

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

  1. char不足以容纳该值。实际结果是它被截断为0x1c
  2. cout特别对待char,因为它通常用于保存文本数据,因此cout会打印出代码为0x1c的字符,这是某种控制角色。您可以尝试使用0x41(例如,代表ASCII和UTF-8中的'A')。
  3. 请注意,没有任何内容可以将0x28ff1c标记为地址。地址将由&a(void*)0x28ff1c形成。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您还可以使用*(int *)(Address) = value作为构造,将value分配给Address并使用@Luchian Grigore的答案