繁体   English   中英

为什么 malloc 返回一个指针? 指针有什么用?

[英]Why malloc returns a pointer? What is the usefulness of pointers?

我正在努力理解指针的用处。 我已经阅读了类似问题的答案,但它们似乎并没有让我明白。

假设我们想要动态分配一些空间来使用变量,我们会做这样的事情: int *i = malloc(sizeof(int)) 我不明白为什么 C 的创建者觉得需要一个指针来完成这项工作。 为什么他们没有 malloc 返回(void)类型的 memory(如果这通常不可能,请纠正我)而不是指向memory 的(void *)指针。 其语法类似于int i = malloc(sizeof(int))

我知道这个问题可能很抽象,因为我没有解释我的大脑所需的所有知识。 如果我说的东西没有意义,请随时告诉我,以便我详细说明。 先感谢您!

malloc不知道 memory 的分配用途。 以向量的 memory 分配为例。 就像是

ptr = malloc(70 * sizeof(int));

您可以在那里写一些 integer 数字,然后例如读取相同的向量作为字符串。

指针的一个重要用途是通过间接进行高效编程

#include <stdio.h>

int main()
{
    int ref = 99;
    int *a=&ref;
    int *b=a;
    printf("a:%d b:%d ref:%d\n", *a,*b,ref);
    *a = 100;
    printf("a:%d b:%d ref:%d\n", *a,*b,ref);
    return 0;
}

看看会发生什么。 在大型向量处理应用程序中,一次更改更多值会带来性能提升。

C 没有其他方法来区分值类型(存储到 memory 单元格)和引用类型(存储对值的引用)。 一旦您考虑结构或 arrays,它就会变得更加明显,即您无法存储到单个 memory 单元中的所有内容。

int *p = malloc(n*sizeof(int)); 

上面的表达式不可能翻译成您建议的语法的合理等价物;

int p = malloc(n*sizeof(int)); 

如果取消指针语法,则只有一个选择: p包含分配空间的 memory 地址(巧合的是,这也是 integer 值)。 这意味着每个指针(或引用类型)变量都是int类型,询问您要转换(并且仍然需要引用运算符)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM