使用malloc转置数组



我认为我的代码是对的,但我仍然无法转换我的数组我对malloc转置的变量编码正确吗?

int *arr = (int *)malloc(r * c * sizeof(int));
int *transpose = (int *)malloc(c * r * sizeof(int));

这是我的输入:

for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
cout << "Element at x[" << i << "][" << j << "] : ";
cin >> *(arr + i * c + j);
}
}

转置代码正确吗?

for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
*(transpose + j + i * c) = *(arr + i * c + j);
}
cout << endl;
}

打印代码是对的吗?

cout << endl << "transpose : " << endl;
for (i = 0; i < c; i++) {
for (j = 0; j < r; j++) {
cout << *(transpose + i * c + j ) << " ";
}
cout << endl;
}

转置和打印都是错误的。

+ j + i*c+ i*c + j在向指针添加整数方面是等效的,只是交换了顺序。

原来的数组似乎有r行和c列,所以转置后的数组将有c行和r列。

转置数组的一列将具有r元素,因此应该将r而不是c乘以转置数组中的行索引。

因此,转置应该是

for(i=0; i<r; i++){
for(j=0; j<c; j++){
*(transpose + j*r + i)=*(arr + i*c + j);
}
cout<<endl;
}

并且打印应该是

cout<<endl<<"transpose : "<<endl;
for(i=0; i<c; i++){
for(j=0; j<r; j++){
cout<<*(transpose + i*r + j )<<" ";
}
cout<<endl;
}

最新更新