为什么mallocreturns一个指针?指针有什么用?

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

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

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

我知道这个问题可能很抽象,因为我不具备解释我大脑中所需要的全部知识。如果我说的话没有意义,请随时告诉我,以便我详细说明。提前致谢!

malloc不知道分配内存干什么 以向量的内存分配为例。 像

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

你可以在那里写一些整数,然后读取与字符串相同的向量。

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

#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 没有其他方法来区分值类型(存储在内存单元中)和引用类型(存储对值的引用)。 一旦考虑到结构或数组,即无法存储到单个内存单元中的所有内容,它就会变得更加明显。

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

以上表达式无法转换为您建议的语法的合理等价物;

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

如果废除指针语法,你只有一个选择: p 包含分配的 space 的内存地址(巧合的是也是整数值)。这意味着每个指针(或引用类型)变量的类型都是 int inquire you to cast(并且仍然需要引用运算符)。