gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:50:08 26 4
gpt4 key购买 nike

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

#include<stdio.h>
int main(){
int i;
int *j;
i = 3;
printf("%d\n", i);
printf("%d\n", &i);
j = &i;
printf("%d\n", j);
}

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

最佳答案

why we need pointer variables...

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

嗯,指针包含值,它不同于整数,不同于 float 等等。即使保存这些值所需的空间也可能有所不同(整数只能占用 2 个字节, float 需要更多)。一个整数包含一个(呃...)整数,只有你(程序员)知道这个数字是正确还是错误。指针包含一个地址,并且只有您知道该地址是否“正确”。指针“指向”某个地方,对此无能为力。有一个异常(exception) - 通常,值 0 或 NULL 被认为“无处可去”,但这只是一个可接受的约定。

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

关于c - 为什么我们不能将地址存储在普通的 int 变量中?通过分配我不希望它指向任何地方。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50980121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com