为什么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(并且仍然需要引用运算符)。
我正在努力理解指针的用处。我已经阅读了类似问题的答案,但它们似乎并没有让我明白。
假设我们想动态分配一些 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(并且仍然需要引用运算符)。