【发布时间】:2018-02-12 12:53:44
【问题描述】:
该实现是否有效且安全地交换两个数组或变量而不用担心它们的数据类型?还是应该使用函数指针?
这种类型的代码专注于使用 void 指针的良好实现来交换,而不用担心数据类型。
#include <stdio.h>
#include <string.h>
void swap(void *, void *, int);
int main(void) {
char a[] = "home";
char b[] = "door";
printf("%s %s\n", a, b);
swap(&a, &b, sizeof(a));
printf("%s %s \n", a, b);
return 0;
}
void swap( void *a, void *b, int siz){
char buff[siz]; // I voluntarily omitted dynamic allocation.
memcpy(buff,a,siz);
memcpy(a,b,siz);
memcpy(b,buff,siz);
}
【问题讨论】:
-
char buff[siz];不是有效的(标准)C++,所以从选择一种语言开始 -
只因为这个问题被标记为[C++],我就提一下
std::swap... -
这根本不安全。如果
sizeof(a) != sizeof(b)有问题。 -
为什么我们不能只交换变量的地址?我的意思是这样的东西不起作用:
char *c = a, *d = b; a = d; b = c; -
这可能是XY Problem。出于什么原因需要交换两个数组的内容?答案可能取决于这个原因。