c-为什么malloc返回指针?指针的作用是什么



我很难理解指针的有用性。我读过类似问题的答案,但它们似乎没有让我明白

假设我们想动态地分配一些空间来使用一个变量,我们可以这样做:int *i = malloc(sizeof(int))。我不明白为什么C的创建者觉得有必要有一个指针来完成这项工作。为什么他们不使用malloc返回(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:%dn", *a,*b,ref);
*a = 100;
printf("a:%d b:%d ref:%dn", *a,*b,ref);
return 0;
}

看看会发生什么。在大型矢量处理应用程序中,一次更改更多值可以提高性能。

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

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

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

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

如果取消指针语法,则只有一个选项:p包含所分配空间的存储器地址(巧合的是,这些地址也是整数值(。这意味着每个指针(或引用类型(变量的类型都是int,询问您进行强制转换(并且仍然需要引用运算符(。

相关内容

  • 没有找到相关文章

最新更新