【发布时间】:2020-05-20 22:25:42
【问题描述】:
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,而它不知道数组的类型?
【问题讨论】:
-
它与
void swap(long x[], int i, int j)相同,除了void*而不是long。您不能将long数组传递给问题中的函数