为什么我们不能将地址存储在普通的int变量中?并通过分配我不希望它指向任何地方。

时间:2018-06-22 03:12:04

标签: c pointers

这是我的基本C代码。只是想知道为什么即使我们不想指向也需要指针变量。我知道不将其指向变量将使其无法使用。还是为了理解。预先感谢。

UdpClient

//指针的内部工作,为什么我们不能使用i =&j,其中i只是一个普通整数。

2 个答案:

答案 0 :(得分:2)

  

为什么我们需要指针变量...

不,直到……我们需要一个指针变量。换句话说,有很多情况(或算法)不需要指针。但是迟早您会意识到需要指针。

那么,指针包含的值不同于整数,不同于浮点数,依此类推。甚至容纳这些值所需的空间也可以变化(整数只能占用2个字节,浮点数则需要更多)。一个整数包含一个(uh ...)整数,只有您(程序员)知道该数字是正确还是错误。指针包含一个地址,并且只有您知道该地址是否“正确”。指针“指向”某处,与它无关。有一个例外-通常,值0或NULL被认为是“无处指向”,但这只是一个公认的约定。

也就是说,许多语言实际上都允许您将指针存储到整数变量甚至是陌生的赋值中,但是已经对您的意图了解很少的编译器,在这种情况下确实比以前知道的更少。因此,您必须强制编译器(例如,使用类型转换),如您在另一个答案中看到的那样,并且您必须知道自己在做什么。正如注释中已经提到的那样,一个典型的问题是有时指针比整数需要更多的字节。这是将浮点数转换为整数的相同情况:您知道会丢失一些东西(在这种情况下为小数)。碰巧的是,如果整数变量有足够的空间(用于表示它的字节),一切都会顺利进行,您可以将指针存储到int中,然后再返回;地址实际上是整数值。但是为什么要这么做呢?仅因为您的算法管理着来自程序以外的数据,例如来自外界的流(数据包)。除了这种情况外,还有一些优雅(正确)的方法可以保留分隔开的整数和指针,并在需要时(很少)混合它们。

答案 1 :(得分:1)

您可以:     int address =(int)&pointer;

但是有些计算机是32位的,有些是64位的,因此地址大小会有所不同。

无论如何,指针只是一个地址。