我有一个二维字符数组: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/

10-15 16:55