首页 > 解决方案 > 使用 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;
}

标签: c++arraysmalloc

解决方案


转置和打印都是错误的。

+ j + i*c并且+ i*c + j等效于将整数添加到指针,只是交换了顺序。

看起来原始数组有r行和c列,所以转置后的数组将有c行和r列。

转置数组的一列将有r元素,因此rc应该乘以转置数组的行索引。

因此,转置应该是

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;
}

推荐阅读