(int*) &i
是什么意思?
char i;
int* p = (int*) &i;
...
*p = 1234567892;
...
如果是* &i
,我会理解。但在这种情况下,这是一个" int
"在那里。
答案 0 :(得分:6)
& i:表示取i的地址(这是一个char *)
(int*)&i
:将该指针强制转换为指向整数的指针(这是坏事/错误,但你告诉编译器这样做,所以它甚至不会给出一个警告)
int* p = (int*)&i;
:一个声明,用于将i的指针存储在p中(并将其转换为:编译器甚至不会抱怨)
*p = 1234567892;
:将此值写入p指向的 base 位置的几个字节(虽然p认为它指向int,是char!)。其中一个字节将以i结尾,但其他字节将覆盖邻近i的字节。
答案 1 :(得分:1)
int *
是一个类型 - 特别是它指向int。
(type)x
是一个类型转换。它说要将x
重新解释或转换为该类型。对于指针类型,它总是意味着重新解释。
i
的类型为char
。因此&i
属于char *
类型。将其投放到int *
会使其为int *
类型,以便可以为其分配p
。
当您随后通过p
撰写文章时,您将撰写完整的int
。
答案 2 :(得分:1)
&i
给出变量i
的地址。 (int *)
将指针char *
转换为指向int
的指针。
语句*p = 1234567892
具有未定义的行为,因为p
实际上指向单个char
的地址,但此表达式将该位置视为包含int
}(不同类型)。在实践中,通常的结果是写入单个char
之后的内存位置,这可能导致数据中毒(例如更改其他变量的值)到立即程序崩溃。
答案 3 :(得分:0)
如果没有(int*)
,gcc会抱怨,因为指向胡萝卜的指针不是指向土豆的指针。
warning: initialization from incompatible pointer type [enabled by default]
因此,这个符号只是意味着我知道我在这里做什么,认为它是一个指向不同类型的指针,即一个int。
答案 4 :(得分:0)
这意味着您的程序即将崩溃BUS error