【发布时间】:2013-06-16 15:11:56
【问题描述】:
首先,我定义了一个 2 列 10 行的动态数组。此处将整数number设置为10为例。
int** array;
int number = 10;
array = malloc(number * sizeof(int*));
for (i = 0; i < number; i++)
array[i] = malloc(2 * sizeof(int));
然后我尝试在上面使用qsort()。
qsort( array, number, sizeof array[0], compare );
这是我的比较功能。它按第一列中的整数值排序,然后按第二列排序,同时保留第一列中的顺序。例如。 “0 2, 1 7, 0 1”将变为“0 1, 0 2, 1 7”。
int compare ( const void *pa, const void *pb ) {
int (*a)[1] = pa;
int (*b)[1] = pb;
if ( (a[0][0] < b[0][0]) || (a[0][0] == b[0][0])&&(a[1][0] < b[1][0]) ) return -1;
if ( (a[0][0] > b[0][0]) || (a[0][0] == b[0][0])&&(a[1][0] > b[1][0]) ) return +1;
return 0;
}
问题
这适用于静态数组。我知道它现在不起作用,因为我有一个动态数组,它是一个指针数组。
如何调整此代码以使用动态创建的多维数组?
【问题讨论】:
-
指向数组的指针!= 指向指针的指针。
标签: c dynamic-arrays qsort