【发布时间】:2012-03-12 19:17:50
【问题描述】:
我正在尝试使用 qsort 对二维指针数组进行排序。我现在唯一的问题是最初我使用的是静态声明的数组,现在切换到指针。我几乎很想切换到结构,但我固执地认为我无法让它工作。
到目前为止,我 malloc 指针的二维数组[array2d[m][3] 是预期的大小]:
int **array2d;
array2d = (int**)malloc((m)*sizeof(int*));
for(i=0; i<=m; i++)
array2d = [i]=(int*)malloc(3*sizeof(int));
qsort(array2d, m, 3*sizeof(int**),comp);
我的比较是:
int comp(const void* left, const void*right)
{
const int *a = *(const int**)left;
const int *b = *(const int**)right;
return a-b;
}
虽然我不确定如何构造比较以使用 2d 指针。
【问题讨论】:
-
您的
comp函数错误。如果a是可能的最小整数值并且b是1 怎么办?那么a - b将是最大可能的整数值(在大多数系统上),因为整数运算中有回绕,即使comp的结果应该是负数,它也是正数。 -
这三个整数是一个大值吗? (即如果 int 是 32 位,它是 96 位数字)
-
3 最初表示第二维内的 3 个空格,如第 1 行有 3 个值。
-
@AdamMihalcin 是的,现在我看看它我应该放 2 个案例来捕捉它,它最初适用于我拥有的其他程序,所以我没有篡改它。