您向qsort传递指向指针数组的指针(apData的类型为AP**),但您的意思是数组的每个元素都是sizeof(struct apData)(就像它是一个结构数组一样)。那是哪一个? 您没有展示如何为scanAPs.apData分配一个值,也没有显示为要排序的数组元素分配存储空间的位置。因此,不幸的是,不清楚您是打算对指针数组进行排序,还是打算使用apData结构的数组。 如果类型声明正确并且您有一个指针数组。。。 由于apData的类型是AP **,那么您将有一个指向某个结构的指针数组。在这种情况下,排序调用应该看起来像: qsort(scanAPs.apData, scanAPs.numAPs, sizeof(struct apData*), compareRSSI); 表示数组中每个元素的指针。 如果类型声明错误并且您有一个结构数组。。。 如果是类型错误,则需要将apData的类型更改为AP*,并将其设置为指向数组中第一个结构的指针。您需要在某个地方分配一个适当的值,并验证是否为该阵列正确分配了存储空间。 在给apData赋值时不要使用C-style转换,因为编译器将确保您具有正确的类型。