为什么你可以为这样的整数变量分配地址,编译器不会给出错误。我总是只能将整数值分配给整数变量
int a=0x28ff1c
您可以对char变量执行相同操作,编译器不会给出错误
char b=0x28ff1c
它将在控制台屏幕上输出char b的垃圾值和int a
的随机值cout<<b
<<endl;
cout<<a;
有人可以向我解释为什么char b和int a的输出存在差异。 有人可以向我解释为什么char变量和整数变量可以为其分配地址
答案 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
的情况略有不同,因为
char
不足以容纳该值。实际结果是它被截断为0x1c
。cout
特别对待char
,因为它通常用于保存文本数据,因此cout
会打印出代码为0x1c
的字符,这是某种控制角色。您可以尝试使用0x41
(例如,代表ASCII和UTF-8中的'A'
)。请注意,没有任何内容可以将0x28ff1c
标记为地址。地址将由&a
或(void*)0x28ff1c
形成。
答案 2 :(得分:1)
因为在任何文字起始0x实际上是一个整数。所以这是允许的。地址 有时可以是整数。
答案 3 :(得分:0)
您还可以使用*(int *)(Address) = value
作为构造,将value
分配给Address
并使用@Luchian Grigore的答案