在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*
表示这是一个指向内存的指针,我们没有指定如何索引。
一个void *总是可以被转换成一个对象指针,但不一定是函数指针。该转换的可靠性取决于实施。 – 2009-08-02 13:10:32