摘要
研究指针时只是一个疑问,我可以使用一个函数交换两个矩阵而无需在其中交换元素吗?
我已经使用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);
...
它已编译,但是当我验证其元素时,它们都没有真正交换
II)
void swapMatrix(int*** a, int*** b){
int*** tmp = a;
a = b;
b = tmp;
...
int main() {
...
print(M1);
swapMatrix(&M1, &M2);
print(M1);
...
同样,它进行了编译,但是当我验证其元素时,没有一个真正被交换。
我应该如何实现该功能,以便仅更改指向指针地址的指针即可交换整个矩阵?可能吗?实际上,我不太了解为什么我的尝试没有奏效。如果您能解释细节,我将不胜感激。
答案 0 :(得分:0)
不,那不可能。您不能选择变量的地址或对其进行修改。
答案 1 :(得分:0)
如果M1和M2是指向矩阵的指针,则选项1中的swapMatrix
将起作用,但指针操作略有不同。您需要交换a
和b
所指向的值(即每个矩阵的地址),但是您只是交换a
和b
(即更改您的本地参数所指向的矩阵指针)。尝试类似的东西:
void swapMatrix(int** a, int** b){
int* tmp = *a;
*a = *b;
*b = tmp;