c++ - 在 C++ 中透明地交换指向字符数组的指针

标签 c++ pointers

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

相关文章:

c++ - 函数中指向 vector vector 的指针给出 'expression must have pointer type' 错误

c++ - 如何使用 show 函数产生输出

c - (1)在函数 ‘main’ :(2) warning: format ‘%d’ expects argument of type ‘int’ , 中,但参数 2 的类型为 ‘int *’ [-Wformat]

c++ - 函数指针用作模板参数时是否需要指向具有外部链接的函数?

c++ - 视差映射中的立体视觉

c++ - 指向指针的指针导致崩溃

C++ 2DArray 对象;指针和数组问题

c - 指向数组的指针作为函数参数

c++ - Win2K/XP目录写权限检查代码

C - float** 函数参数不传递值