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

问题描述 投票:0回答:1

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

c pointers void
1个回答
1
投票

数组does具有类型。它是void *的数组,并且void *是完全定义的类型,与void不同。

因此,此函数正在执行的操作是在数组中交换一对void *

如果将v定义为void *而不是void *[],则可能会有问题。

© www.soinside.com 2019 - 2024. All rights reserved.