指向结构中数组的指针
A pointer to the array in a struct
qsort的第一个参数需要一个指向数组的指针...
在这种情况下我如何传递指针?
typedef struct apData {
char ssid[32];
sint8 rssi;
AUTH_MODE authmode;
char bssid[18];
int32_t channel;
uint8 is_hidden;
} AP;
//BSSs SCANNED
typedef struct {
bool scanInProgress = NOT_SCANNING;
AP **apData;
int numAPs;
} Scan;
static Scan scanAPs;
...
问题出在传递第一个参数...
我不明白为什么我在 compareRSSI() 函数中得到垃圾
qsort(scanAPs.apData, scanAPs.numAPs, sizeof(struct apData), compareRSSI);
...
int compareRSSI(const void *bss1, const void *bss2) {
int firstAP = ((struct apData *)bss1)->rssi;
int secondAP = ((struct apData *)bss2)->rssi;
return (secondAP - firstAP);
}```
您正在向 qsort
传递一个指向 指针数组的指针 (apData
的类型为 AP**
),但是您'是说数组的每个元素都是sizeof(struct apData)
(就好像它是结构的数组)。那是哪一个?
您没有说明如何为 scanAPs.apData
赋值,也没有说明为要排序的数组元素分配存储空间的位置。因此,不幸的是,不清楚您是打算对指针数组进行排序,还是打算对 apData
结构数组进行排序。
如果类型声明正确并且您有一个指针数组...
因为 apData
的类型是 AP **
,那么你会有一个指向某处结构的指针数组。在这种情况下,您的排序调用应该如下所示:
qsort(scanAPs.apData, scanAPs.numAPs, sizeof(struct apData*), compareRSSI);
注意sizeof表示数组的每个元素都是一个指针
如果类型声明错误并且您有一个结构数组...
如果是类型错误,则需要将apData的类型改为AP*
,并将其设置为指向数组中第一个结构的指针。您需要在某处分配一个适当的值,并验证您是否也正确地为数组分配了存储空间。
在分配 apData
值时,不要 使用 C 风格的转换,因为编译器将确保您拥有正确的类型。
这是我的解决方案!这些人帮了我很多。
link!
qsort(scanAPs.apData, scanAPs.numAPs, sizeof(struct apData*), compareRSSI);
...
int compareRSSI(const void *bss1, const void *bss2) {
struct apData **firstAP = (struct apData **)bss1;
struct apData **secondAP = (struct apData **)bss2;
return ((*secondAP)->rssi - (*firstAP)->rssi);
}
qsort的第一个参数需要一个指向数组的指针... 在这种情况下我如何传递指针?
typedef struct apData {
char ssid[32];
sint8 rssi;
AUTH_MODE authmode;
char bssid[18];
int32_t channel;
uint8 is_hidden;
} AP;
//BSSs SCANNED
typedef struct {
bool scanInProgress = NOT_SCANNING;
AP **apData;
int numAPs;
} Scan;
static Scan scanAPs;
...
问题出在传递第一个参数... 我不明白为什么我在 compareRSSI() 函数中得到垃圾
qsort(scanAPs.apData, scanAPs.numAPs, sizeof(struct apData), compareRSSI);
...
int compareRSSI(const void *bss1, const void *bss2) {
int firstAP = ((struct apData *)bss1)->rssi;
int secondAP = ((struct apData *)bss2)->rssi;
return (secondAP - firstAP);
}```
您正在向 qsort
传递一个指向 指针数组的指针 (apData
的类型为 AP**
),但是您'是说数组的每个元素都是sizeof(struct apData)
(就好像它是结构的数组)。那是哪一个?
您没有说明如何为 scanAPs.apData
赋值,也没有说明为要排序的数组元素分配存储空间的位置。因此,不幸的是,不清楚您是打算对指针数组进行排序,还是打算对 apData
结构数组进行排序。
如果类型声明正确并且您有一个指针数组...
因为 apData
的类型是 AP **
,那么你会有一个指向某处结构的指针数组。在这种情况下,您的排序调用应该如下所示:
qsort(scanAPs.apData, scanAPs.numAPs, sizeof(struct apData*), compareRSSI);
注意sizeof表示数组的每个元素都是一个指针
如果类型声明错误并且您有一个结构数组...
如果是类型错误,则需要将apData的类型改为AP*
,并将其设置为指向数组中第一个结构的指针。您需要在某处分配一个适当的值,并验证您是否也正确地为数组分配了存储空间。
在分配 apData
值时,不要 使用 C 风格的转换,因为编译器将确保您拥有正确的类型。
这是我的解决方案!这些人帮了我很多。 link!
qsort(scanAPs.apData, scanAPs.numAPs, sizeof(struct apData*), compareRSSI);
...
int compareRSSI(const void *bss1, const void *bss2) {
struct apData **firstAP = (struct apData **)bss1;
struct apData **secondAP = (struct apData **)bss2;
return ((*secondAP)->rssi - (*firstAP)->rssi);
}