K&R的第121页列出了以下用于交换两个数组元素的功能:
void swap(void *v[], int i, int j)
{
void *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
我不明白当数组没有类型时,如何索引数组。
据我所知,类型在运行时不存在,并且不能保证此函数将与使用它的代码一起编译。
那么当包含任何大小的值的数组可以传递给它时,该函数如何正确执行数组索引?
换句话说,如果我将long
数组传递给此函数,当它不知道数组的类型时,如何知道v[i]
位于v + sizeof(long) * i
?
数组does具有类型。它是void *
的数组,并且void *
是完全定义的类型,与void
不同。
因此,此函数正在执行的操作是在数组中交换一对void *
。
如果将v
定义为void *
而不是void *[]
,则可能会有问题。