将指针交换为指针
Swapping pointer to pointer
在我写的这个程序中,我使用的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>
可以访问它。
- 共享指针的复制和交换效率
- 如何在单个链表中交换两个节点的位置,只修改指针
- 以原子方式交换指针与 nullptr
- 使用指针交换整数
- 使用指针 c++ 交换结构数组中的元素
- 使用指针交换数组的内容
- 无法使用指针写入交换
- 使用指针交换而不引用数组C++
- 共享指针交换方法标识更改
- 为什么基于指针交换两个值在函数范围之外不起作用?
- 将指针交换为指针
- 使用双向链表中的指针交换节点
- 使用指针交换字符变量
- 通过 xor 运算符使用引用或指针交换两个变量的值
- 指针交换怪异
- 当数组是类的数据成员时,如何使用指针交换数组
- 使用公用指针交换指向已分配内存的指针
- 使用指针交换两个字符串会输出奇怪的输出
- 仅通过操作指针交换链表中的相邻节点
- 使用指针交换两个变量