[英]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.