Con*_*nor 0 c swap void-pointers
我想做一个交换函数,可以通用地用于任何数据类型。我知道以下函数适用于int:
void swap(void *a, void *b)
{
int temp;
temp = *(int*)a;
*(int*)a = *(int*)b;
*(int*)b = temp;
}
Run Code Online (Sandbox Code Playgroud)
这适用于字符串:
void swap(void *a, void *b)
{
void *temp;
temp = *(void**)a;
*(void**)a = *(void**)b;
*(void**)b = temp;
}
Run Code Online (Sandbox Code Playgroud)
如果您也传递了pointee的大小(如中的qsort),则可以这样做:
void swap(void * a, void * b, size_t len)
{
unsigned char * p = a, * q = b, tmp;
for (size_t i = 0; i != len; ++i)
{
tmp = p[i];
p[i] = q[i];
q[i] = tmp;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
struct Qux x, y;
swap(&x, &y, sizeof(Qux));
Run Code Online (Sandbox Code Playgroud)
(您可能希望将restrict限定符添加到指针,或者以其他方式进行自交换测试。)