【发布时间】:2012-01-09 01:31:45
【问题描述】:
stackoverflow 上有很多关于如何对结构指针数组进行排序的问题。我把它们都看了一遍,无济于事。我想对指向结构数组的指针数组进行排序。我首先为指针数组分配存储空间,然后为结构本身分配存储空间。这一切似乎都很好,但我无法将它们分类。我确定问题出在比较功能中。我从 stackoverflow 复制了其中的一些,它们在下面列出。但是它们都不起作用...
typedef struct s_stream{
int amc;
char *name;
} dataStream;
void abc(void)
{
int count = 100;
dataStream *_UniqueStreamBuild = calloc(count, sizeof(dataStream ));
dataStream **UniqueStreamBuild = calloc(count, sizeof(dataStream *));
for ( int i = 0; i < count; ++i) UniqueStreamBuild[i] = _UniqueStreamBuild + i;
//**Edit: ******** **
// here I call a cascade of functions that assign values to amc; those
// functions are correct: they produce an unsorted array of amc values;
// the output I am getting is an array of structures seemingly in random order.
qsort(UniqueStreamBuild, count, sizeof(dataStream *), compare);
}
int compare (const void * a, const void * b)
{
const dataStream *x = a;
const dataStream *y = b;
if (x->amc > x->amc)
return(1);
if (x->amc < x->amc)
return(-1);
return(0);
}
int compare( const void *a, const void *b )
{
dataStream *m1 = *(dataStream **)a;
dataStream *m2 = *(dataStream **)b;
if (m1->amc > m2->amc)
return(1);
if (m1->amc < m2->amc)
return(-1);
return(0);
}
【问题讨论】:
-
您能否提供一个独立、正确、可编译的示例,其中包含您的预期输出和实际输出? sscce.org
-
我认为您的第二个比较功能应该可以工作。不过第一个是错的。正如大卫所说,您应该提供完整的程序、输入、预期输出等。解释可能不是比较功能。