将地址赋值给整型变量

Assignment of address to integer variable

本文关键字:整型变量 赋值 地址      更新时间:2023-10-16

为什么你可以像这样给一个整数变量分配地址,编译器不会给出错误。我一直认为你只能将整数值赋给整型变量

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的情况略有不同,因为

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

请注意,没有任何标记0x28ff1c作为地址。地址由&a(void*)0x28ff1c组成。

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

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