我很难理解指针的有用性。我读过类似问题的答案,但它们似乎没有让我明白
假设我们想动态地分配一些空间来使用一个变量,我们可以这样做: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
,询问您进行强制转换(并且仍然需要引用运算符(。