在 Java 中没有指针算法。它认为这就是你要问的。例如,假设malloc
返回一个类型的指针int
int* malloc(size_t size)
{
//
}
您可能会收到指针,它基本上是指向array
. 然后你会像常规数组一样索引它。
int* arr = malloc(10 * sizeof(int)); // 10 contiguous int(s).
问题是C
没有函数重载。因此,我们必须找到一种方法来编写泛型malloc
. 否则,您最终会malloc
为每种类型提供不同的结果。解决方案是发送您需要的所需字节数。然后,您可以随意索引它。这提供了更大的灵活性和一个通用的解决方案。
int* i = (int*)malloc(10 * sizeof(int)); // 40 bytes if int = 4 bytes
char* c = (char*)malloc(10 * sizeof(char)); // 10 bytes if char = 1 byte
int thirdElement = i[3]; // third element. 12 bytes away from (*i)
char secondElement = c[2]; // second element. 2 bytes away from (*c)
所以,整个想法是,我们如何索引我们从中获得的内存并不重要malloc
。我们所要做的就是指定新创建的数组的类型以正确索引它。 void*
意味着这是一个指向内存中的指针,我们没有指定如何索引。