C 具有void数组指针参数的函数如何知道数组元素的大小?
K&R第121页列出了交换两个阵列元素的以下功能:C 具有void数组指针参数的函数如何知道数组元素的大小?,c,pointers,void,C,Pointers,Void,K&R第121页列出了交换两个阵列元素的以下功能: void swap(void *v[], int i, int j) { void *temp; temp = v[i]; v[i] = v[j]; v[j] = temp; } 我不明白当数组没有类型时,索引到数组中是如何工作的 据我所知,类型在运行时不存在,并且不能保证此函数将与使用它的代码一起编译 那么,当包含任意大小值的数组可以传递给该函数时,该函数如何能够正确执行数组索引 换句话说,如果我将long
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*
数组,void*
是一个完全定义的类型,与void
不同
因此,此函数所做的是在数组中交换一对void*
如果
v
被定义为void*
而不是void*[]
,那么您就有问题了。啊,我明白了void*v[]
是一个void指针数组,而不是指向一个void数组的指针。它与void swap(long x[],int i,int j)
相同,只是用void*
代替long
。不能将long
数组传递给问题中的函数