指向另一种类型的指针

时间:2014-12-19 08:43:24

标签: c++ c pointers

指针存储它指向的变量的地址。但是为什么一种类型的指针不能指向另一种类型的变量的地址呢?

例如,为什么下面的代码会给我一个错误?

int main()
{
   int *i;
   float a;
   i=&a;     //this statement gives me an error
}

3 个答案:

答案 0 :(得分:0)

您已将i声明为整数,将a声明为浮点数。 如果指向一个变量,数据类型应该相同,只有当a是一个整数变量时才可以指向a。 更改as int的数据类型并执行该程序。 您可以参考this链接。 如果它是一个void指针,指针可以指向任何类型。 但无法取消引用void指针。只有当编译器知道指针变量的数据类型时,它才能取消引用指针并执行操作。

答案 1 :(得分:0)

在32位机器中,通常以4个字节为单位。声明数据类型时,它指向该数据类型并将字节等于数据类型字节。

在这种情况下,我是一个指向int的指针。这意味着它将指向四个字节。值可以以整数格式存储。而a是浮点变量。因此它将采用以浮动格式存储的值(它表示指数和尾数)。在访问具有不同数据类型的指针时。它将取消引用相应数据类型格式的值。所以我们得到了一些垃圾值或者在位中启用了一些值。

答案 2 :(得分:-4)

嗯,实际上非常有趣,我正在编写代码并遇到这种错误,当时我自己想出了原因但后来忘记了,一旦我发布了问题,答案就再次发现给我了

在上面的代码中,i是一个整数类型的指针变量,它被分配了4个字节的内存(虽然取决于平台,但现在让我们假设)另一方面浮动将分配8个字节的内存(再次假设)。因此,如果我使i指向float变量,它将失去精度,因为它只能包含存储在前两个字节中的值。