gpt4 book ai didi

c - C 总是必须使用指针来处理地址吗?

转载 作者:行者123 更新时间:2023-11-30 18:33:49 24 4
gpt4 key购买 nike

据我了解,C 必须处理地址的所有情况都涉及指针的使用。例如, & 操作数创建一个指向程序的指针,而不是仅仅将裸地址作为数据给出(即,如果不首先使用指针,它永远不会给出地址):

scanf("%d", &foo)

或者使用 & 操作数时

int i; //a variable
int *p; //a variable that store adress
p = &i; //The & operator returns a pointer to its operand, and equals p to that pointer.

我的问题是:C 程序总是必须使用指针来管理地址是否有原因?是否存在 C 可以单独或使用其他方法处理裸地址(地址的数值)的情况?或者说这完全不可能? (由于系统架构、每个运行时期间和内部的内存分配发生变化等)。最后,由于内存管理而导致地址发生变化,这会有用吗?如果是这样的话,这就是为什么总是需要指针的原因。

我试图弄清楚使用指针在 C 标准化语言中是否是必须的。不是因为我想使用其他东西,而是因为我想确定使用地址的唯一方法是使用指针,而忘记其他一切。

编辑:由于 Eric Postpischil、Michał Marszałek、user3386109、Mike Holt 和 Gecko 的评论回答了部分问题;我将在这里对这些位进行分组:是的,由于不同的因素,使用裸地址几乎没有用处(指针允许许多操作,地址每次运行程序时可能会发生变化,等等)。正如 Michał Marszałek 指出的(没有双关语) scanf() 使用指针,因为 C 只能处理副本,因此需要一个指针来更改所使用的变量。即

int foo;
scanf("%d", foo) //Does nothing, since value can't be changed
scanf("%d", &foo) //Now foo can be changed, since we use it's address.

最后,正如 Gecko 提到的,指针代表间接寻址,以便编译器可以区分数据和地址。

John Bode 在其回答中涵盖了大部分主题,因此我将标记该主题。

最佳答案

指针一个地址(或者更准确地说,它是一个地址的抽象)。指针是我们在 C 中处理地址值的方式。

除了少数域之外,“裸地址”值本身并没有什么用处。我们对地址更感兴趣,而不是对该地址处的对象感兴趣。 C要求我们在两种情况下使用指针:

  • 当我们希望函数写入参数时
  • 当我们需要跟踪动态分配的内存时

在这些情况下,我们并不真正关心地址值实际是什么;我们只需要它来访问我们感兴趣的对象。

是的,在嵌入式世界中,特定的地址值是有意义的。但您仍然使用指针来访问这些位置。正如我上面所说,指针用于我们目的的地址。

关于c - C 总是必须使用指针来处理地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54660039/

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