gpt4 book ai didi

我可以用一个函数交换两个矩阵,只交换其基地址,而不逐个元素交换吗?

转载 作者:行者123 更新时间:2023-11-30 16:17:30 26 4
gpt4 key购买 nike

摘要

在学习指针时有一个疑问,我可以使用函数交换两个矩阵而不需要逐个元素交换吗?

我使用 malloc 动态创建了 2 个矩阵,并在 main() 中声明了其元素值。所以,我可以这样交换:

(逐个元素交换)

void swapMatrix(int** a, int** b){
for(int i = 0; i< row; i++){
for(int j = 0; j< col; j++){
int tmp = a[i][j];
a[i][j] = b[i][j];
b[i][j] = tmp;
}
}
}
...
int main() {
...
print(M1);
swapMatrix(M1, M2);
print(M1);
...

(逐行交换)

void swapMatrix(int** a, int** b){
int* tmp = *a;
*a = *b;
*b = tmp;
for (int i = 0; i<col; i++){
int* tmp = *(a+i);
*(a+i) = *(b+i);
*(b+i) = tmp;
}
}
...
int main() {
...
print(M1);
swapMatrix(M1, M2);
print(M1);
...

尝试

但是有没有办法将矩阵指针更改为指针地址?我尝试了以下代码:

我)

void swapMatrix(int** a, int** b){
int** tmp = a;
a = b;
b = tmp;
}
...
int main() {
...
print(M1);
swapMatrix(M1, M2);
print(M1);
...

它编译了,但当我验证它的元素时,它们都没有真正交换

二)

void swapMatrix(int*** a, int*** b){
int*** tmp = a;
a = b;
b = tmp;

...
int main() {
...
print(M1);
swapMatrix(&M1, &M2);
print(M1);
...

它再次编译,但是当我验证它的元素时,它们都没有真正交换。

我应该如何实现该函数,以便仅将指针更改为指针地址即可交换整个矩阵?是否可以?事实上,我真的不明白为什么我的尝试没有成功。如果您能解释详细信息,我将不胜感激。

最佳答案

不,这是不可能的。您也无法选择变量的地址或修改它们。

关于我可以用一个函数交换两个矩阵,只交换其基地址,而不逐个元素交换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com