(int *)& var是什么意思?

时间:2015-02-15 03:03:26

标签: c pointers

(int*) &i是什么意思?

  char i;
  int* p = (int*) &i;
  ...
  *p = 1234567892;
  ...

如果是* &i,我会理解。但在这种情况下,这是一个" int"在那里。

5 个答案:

答案 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