我有一个函数,它接受指向结构数组的指针

typedef struct {
    bool isUsed;
    int count;
} MyStructure;

void Process(MyStructure *timeStamps, int arrayLength){
    for (int i = 0; i < arrayLength; i++){
        MyStructure *myStructure = &(*(timeStamps + i));
        if (myStructure->isUsed == true){
          /*do something*/
        }
    }

}

我访问数组的方式似乎有点偏离。
&(*(timeStamps + i))

有更好的办法吗?

最佳答案

参数timeStampsMyStructure*类型,这意味着此行:

MyStructure *myStructure = &(*(timeStamps + i));

相当于:
MyStructure *myStructure = timeStamps + i;

也相当于:
MyStructure *myStructure = &timeStamps[i];

注意,在这个表达式中:&(*(timeStamps + i))timeStamps + i是指向索引处元素的指针(即该元素的地址),然后使用返回类型为i的l值的dereference operator (*)来取消引用,然后使用运算符的地址(MyStructure)来检索此元素的地址,该地址等于开始时保留的地址。

10-07 12:14