首先,我想确保在使用指针时可以正确访问数组成员。
这是等价的吗?
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
和for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> *(*(a + i) + j);
}
}
这就是我个人在使用指针时读入数组的方式。如果没问题(我问这个是因为我可能做错了)我应该如何使用交换功能?我试过这样做:
swap(*(*(a + i) + j), *(*(a + j) + i));
但没有任何 react ,同时这样做int aux = *(*(a + i) + j);
*(*(a + i) + j) = *(*(a + j) + i);
*(*(a + j) + i) = *(*(a + i) + j);
让它工作。这是整个功能
void parcugereMatrice(int n, int**& a)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (paritate(*(*(a+i)+j)) == paritate(*(*(a + j) + i)))
{
/*int aux = *(*(a + i) + j);
*(*(a + i) + j) = *(*(a + j) + i);
*(*(a + j) + i) = *(*(a + i) + j);*/
swap(*(*(a + i) + j), *(*(a + j) + i));
}
}
}
}
我认为我需要通过引用将值传递给交换函数才能工作,但我不知道如何。现在,我认为值是按值传递的,所以在这个函数之外不会有任何变化(如果我错了,请纠正我)。如果这是答案,参数应该是什么样子?
谢谢。
最佳答案
您可以使用 std::swap_ranges
.
如果您的指针是衰减的二维数组:
void swap(int* a[N], int* b[N], int) {
if (a != b)
std::swap_ranges(&a[0][0], &a[N][N], &b[0][0]);
}
如果您的指针是指向数组的指针的衰减数组:void swap(int** a, int** b, int n) {
if (a != b)
std::swap_ranges(&a[0], &a[n], &b[0]);
}
如果您的指针没有衰减(而是动态分配):void swap(int** a, int** b, int) {
std::swap(a, b);
}
关于c++ - 当参数必须是使用指针的二维数组时如何在 C++ 中使用 swap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64808379/