【问题标题】:transpose array using malloc使用 malloc 转置数组
【发布时间】:2020-10-28 14:26:01
【问题描述】:

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

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++ 中使用 malloc。
  • 为什么不使用[] 运算符,如arr[i*c + j] 而不是*(arr + i*c + j)
  • 我建议将这些原始指针包装在一个知道矩阵形状并为您进行正确计算的小类中。

标签: c++ arrays malloc


【解决方案1】:

转置和打印都错了。

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

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 2021-12-25
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    相关资源
    最近更新 更多