【发布时间】:2022-01-02 16:22:49
【问题描述】:
我很难理解指针的用处。我已经阅读了类似问题的答案,但它们似乎并没有让我明白。
假设我们想要动态分配一些空间来使用变量,我们会做这样的事情:int *i = malloc(sizeof(int))。我不明白为什么 C 的创建者觉得需要一个指针来完成这项工作。为什么他们没有 malloc 返回 (void) 类型的内存(如果这通常不可能,请纠正我)而不是 (void*) 指针指向该内存。其语法类似于int i = malloc(sizeof(int))。
我知道这个问题可能很抽象,因为我没有解释我的大脑所需要的所有知识。如果我说的东西没有意义,请随时告诉我,以便我详细说明。提前谢谢!
【问题讨论】:
-
您不需要为示例中的单个变量使用
malloc,定义int i;就可以了,然后语法int i = 42;将分配一个初始化的 value 到i. -
@WeatherVane 我知道在特定情况下我有这个选项,但这并不能解释为什么在动态分配内存时需要在 C 中使用指针。
-
对于可变长度数组(如果支持),它们不是必需的。您可以定义
int len = 42; int i[len];来动态定义一个数组(并且您不必清理),但它的范围会受到限制。 -
@WeatherVane 你能告诉我在哪里可以阅读哪些是必要的案例吗?
-
指针的一个用处是,您可以通过指针传递信息,而不是信息本身。就像你写在纸上的家庭住址不是房子本身,而是它的位置。如果有大量数据,将其传递给您,则不需要复制该数据所需的资源开销:您只需要传递有关数据位置的信息(指针)。它还解决了当数据被修改时,它只存在于一个地方,您不必跟踪(和更新)所做的副本的问题。