将指针交换为指针

Swapping pointer to pointer

本文关键字:指针 交换      更新时间:2023-10-16

在我写的这个程序中,我使用的2个矩阵称为指针指向指针。最初,矩阵B等于矩阵A,并且对矩阵B进行了所有更改(我不需要修改A中的值,因为我使用这些值来计算其他内容,如果我直接修改它,我实际上会得到结果错误)。最后,我需要交换两个矩阵中的值。我的程序已经在运行和编译,但是要交换我使用的矩阵

for(i=0;i<n;++i)
    for(j=0;j<n;++j)
        A[i][j]=B[i][j];

我知道这不是最好的方法,所以我想知道是否有一种方法可以用指针换我的矩阵。我已经尝试自己做。但是我是C 编程的新手,我似乎无法设法做对了:(。

这是我的代码的草图:

void swap(int **A, int **B){
?
}
main (){
int **A, **B;
*code*
swap(A,B);
}

c 已经为我们提供了一个swap函数:

int main()
{
   int** A;
   int** B;
   /* ... code ... */
   std::swap(A, B);   
}

在这种特殊情况下,它的作用基本上是这样:

void swap(int**& lhs, int**& rhs)
{
   int** tmp;
   tmp = lhs;
   lhs = rhs;
   rhs = tmp;
}

或用指针而不是引用:

void swap(int*** lhs, int*** rhs)
{
   int** tmp;
   tmp = *lhs;
   *lhs = *rhs;
   *rhs = tmp;
}

使用最后一个,您要致电swap(&A, &B)(注意&)。

也就是说,为什么所有这些指针?您在C 中。使用容器。

至少考虑使用真实数组,因为我严重怀疑int**类型正在做您认为正在做的事情。

对我来说,这似乎是一个过滤或管道类型操作,所以我建议只是简单地将指针交换而不是移动每个元素。

您需要一个中间指针来进行交换,但是由于它只是指针,这是固定量的存储,将矩阵的大小比较,因此如果数据集足够大,则应比复制要快得多。

int **A,**B,**tmp;
tmp = A;
A=B;
B=tmp;

如上所述,结构或其他容器可能很有用,特别是如果您进行任何动态内存分配并需要释放它以避免内存泄漏。

从您问题的详细描述中,似乎"交换"并不能真正传达您想要的内容 - for循环将B中的值分配给A中的值。您显然愿意在A中丢弃旧值。下一个问题是:您愿意丢弃A的存储吗?如果是这样,它就像

一样简单
// Don't forget to deallocate A first, as appropriate to however you allocated A.
A = B;

但是,如果您想重复执行算法,则可能要保留存储空间,而不是击败免费商店。如果您希望下一个迭代从上一个迭代的输出开始(即,您希望A和B都可以容纳您刚刚计算的矩阵),那么您的循环是您可以合理地期望的。

如果您期望从新数据重新开始,那么std::swap(A,B)就是您想要的。#include <algorithm>可以访问它。