我有一个二维字符数组:
char nm[MAX1][MAX2] = { "john", "bob", "david"};
我想通过简单地编写
来交换其中两个元素(没有 std::swap
)
swapPointers(nm[0], nm[1]);
swapPointers
看起来像这样
void swapPointers(char *&a, char *&b)
{
char *temp = a;
a = b;
b = a;
}
但是,这不会编译(虽然添加强制转换使其编译,但指针最终指向错误/奇怪的位置)。
有人可以帮忙吗?
谢谢!
最佳答案
Zan 很接近,但他的问题是他的“交换”函数可以接受任何指向字符的指针。如果使用不当,这可能会导致问题。这是一个更安全的版本:
void swap(char (&x)[MAX2], char (&y)[MAX2])
{
char temp[MAX2];
memcpy(temp, x, MAX2);
memcpy(x, y, MAX2);
memcpy(y, temp, MAX2);
}
发帖人也有一个误解:'nm'是一个二维字符数组。没有指针。 nm[0]、nm[2] 等...也不是指针——它们仍然是(一维)数组。一维数组可以隐式转换为指针这一事实在许多 C 和 C++ 程序员中引起了这种类型的混淆。
为了交换二维数组中的数据,您必须交换大小为 MAX2 的内存块——如 Zan 和我编写的两个“交换”函数所示。
关于c++ - 在 C++ 中透明地交换指向字符数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/125094/