我认为我的代码是对的,但我仍然无法转换我的数组我对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;
}