【发布时间】:2022-01-16 03:59:12
【问题描述】:
我不擅长 C 指针,我不确定我应该如何对整个数组进行排序,下面的代码仅按行对数组进行排序,并带有警告“赋值从指针目标类型中丢弃 'const' 限定符 [ -Wdiscarded-qualifiers]"。此代码确实适用于 Windows,但不确定是否适用于其他操作系统。我应该使用 2D const int 指针数组及其大小 m 作为输入来创建一个名为 snake 的函数。我不允许移动或交换要扫描的数组中的内容,也不允许编辑整个 main 函数。例如,整个程序的输入是
3
9 8 7
5 4 6
3 2 1
正确的输出应该是
1 2 3
6 5 4
7 8 9
相反,我得到了这个
7 8 9
4 5 6
1 2 3
这是我的代码。 snake() 中有一个注释部分,因为如果我取消注释,断言函数将失败。我试图在排序后反转偶数行(但索引从 0 开始,所以你也可以说奇数行)。
#include <stdio.h>
#include <assert.h>
void snake(const int *ptr_array[100][100], int m){
int* p =NULL;
int temp;
for(int y=0;y<m;y++){
for(int k=0;k<m-1;k++){
for(int g=0;g<m-k-1;g++){
if(*ptr_array[y][g]>*ptr_array[y][g+1]){
p=(ptr_array[y][g]);
(ptr_array[y][g])=(ptr_array[y][g+1]);
(ptr_array[y][g+1]) = p;
}
}
}
}
// for(int h=1;h<m;h+=2){
// for(int g=0;g<m/2;g++){
// p = (ptr_array[h][m-g]);
// (ptr_array[h][m-g]) = (ptr_array[h][g]);
// (ptr_array[h][g]) = p;
// }
// }
}
int main()
{
int array[100][100], check[100][100];
const int *ptr_array[100][100];
int i, j, m;
scanf("%d", &m);
for (i = 0; i < m; i++){
for (j = 0; j < m; j++) {
ptr_array[i][j] = &(array[i][j]);
scanf("%d", &(array[i][j]));
check[i][j] = array[i][j];
}
}
snake(ptr_array, m);
for (i = 0; i < m; i++) {
for (j = 0; j < m; j++) {
assert(check[i][j] == array[i][j]);
assert((ptr_array[i][j] >= &array[0][0]) && (ptr_array[i][j] <= &array[99][99]));
printf("%d ", *(ptr_array[i][j]));
}
printf("\n");
}
return 0;
}
【问题讨论】:
标签: arrays c sorting pointers multidimensional-array