c++ - 使用 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;
}
推荐阅读
- oracle - 如何在Oracle中执行多值参数函数
- c# - 理解覆盖和新属性
- c++ - 带有 XAML 和 UWP 的 C++
- python - 跳过音轨(pygame.mixer.music)
- javascript - Uncaught DOMException: Blocked a frame with origin Chrome extension
- java - XML 文件中的自定义正则表达式字符串模式
- php - Symfony 3:如何使用 Doctrine 同步用户
- ruby-on-rails - 下拉菜单项链接在 rails 和 bootstrap4 中不起作用
- python - kivy 布局:希望将组件的高度比例设置为 5:1
- ionic-framework - 滑动列表可以保存类别和子类别吗?