我发现了很多关于此的线程,但没有解释我的具体问题。C通过将数组中的指针强制转换为void指针K&R
所以ķ&的R题为“指针的功能”有关开启任何指针数组成void*
指针的数组,然后使此数组qsort
会谈,为了在部以能够进行排序的一个通用的排列项目。
qsort
使用称为swap
的函数,它交换指针中的两个指针,有效地交换数组中位置将指向的位置。
它通过公共
void* tmp = v[i];
v[i] = v[j];
v[j] = tmp;
这里是我的问题,实现这一点。假设传入的v
是一个整数指针数组,并且假设它们是4个字节。在swap
这个数组被表示为void*
指针的数组。当函数执行v[i] = ...
时,它将v
的第一个元素的位置偏移i*sizeof(void*)
,并获取此内存位置中的元素。正确?但是如果sizeof(void*)
与sizeof(int*)
不一样?然后v[i]
将不会得到包含原始int*
的整个内存位置,我甚至会假设将返回什么。 那么swap
如何解释呢? 预先感谢
请小心。交换指针的内容与交换它们指向的对象**的内容非常不同。 – Olaf
“,假设这些是4个字节”你应该已经不再考虑这个了。你看起来会尝试导致不可维护的代码。 – Olaf
它交换指针本身,而不是指针指向的数据 – rlbond