假设我有这个结构:

struct MyStruct {
  int iID;
  int iMyNumber;
};

然后我定义了一个MyStructs数组:
struct MyStruct msTest[3];

我正在对一个类似于这个结构的结构执行排序操作,方法是查看ID。现在,一旦我发现应该交换哪些记录来对数组进行排序,我就必须执行实际的交换我试过这个:
if (iSmallest != iCntr) {
    stPTmp = &stXDB[iCntr];
    &stXDB[iCntr] = &stXDB[iSmallest];
    &stXDB[iSmallest] = &stPTmp;
}

stPTmp定义为void *stPTmp;iCntr并且iSmallest包含要交换的记录的索引我的代码不起作用,但我该如何修复它?

最佳答案

你需要交换元素,而不是指针,

struct MyStruct stTmp;

if (iSmallest != iCntr) {
    stTmp = stXDB[iCntr];
    stXDB[iCntr] = stXDB[iSmallest];
    stXDB[iSmallest] = stTmp;
}

效率不高,但结构很小,所以比交换指针要贵一点。

08-06 00:46