Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 具有void数组指针参数的函数如何知道数组元素的大小?_C_Pointers_Void - Fatal编程技术网

C 具有void数组指针参数的函数如何知道数组元素的大小?

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

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*
数组,
void*
是一个完全定义的类型,与
void
不同

因此,此函数所做的是在数组中交换一对
void*


如果
v
被定义为
void*
而不是
void*[]
,那么您就有问题了。

啊,我明白了
void*v[]
是一个void指针数组,而不是指向一个void数组的指针。它与
void swap(long x[],int i,int j)
相同,只是用
void*
代替
long
。不能将
long
数组传递给问题中的函数