指向其他类型的指针

Pointer pointing to a different type

本文关键字:指针 类型 其他      更新时间:2023-10-16

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

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

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

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

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

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

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

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

相关文章: