0

我有一个函数,它需要一个指向结构数组的指针

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))

有一个更好的方法吗?

4

5 回答 5

6
&(*(timeStamps + i))

相当于

&timeStamps[i]

反过来,也就是简单地

timeStamps + i

就这样 :)

于 2013-03-03T21:32:03.250 回答
2

参数timeStamps是 type MyStructure*,这意味着这一行:

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

相当于:

MyStructure *myStructure = timeStamps + i;

这也相当于:

MyStructure *myStructure = &timeStamps[i];

请注意,在此表达式中:&(*(timeStamps + i))timeStamps + i指向索引处元素的指针i(即该元素的地址),然后使用解引用运算符 ( *)将其解引用,该运算符返回类型的左值,MyStructure然后检索此元素通过使用地址运算符 ( &) 来实现,该运算符等于timeStamps + i在开头保存的地址。

于 2013-03-03T21:32:25.650 回答
0
MyStructure *myStructure = &timeStamps[i];
于 2013-03-03T21:31:09.070 回答
0

自从我在 C 中工作以来已经有一段时间了,但据我所知,方括号索引运算符 ([]) 与添加到指针相同。所以:

timeStamps[i]应该相当于*(timeStamps + i)

因此你应该能够使用

myStructure = &timeStamps[i]

于 2013-03-03T21:33:07.727 回答
0

我会建议:

void Process(MyStructure *timeStamps, int arrayLength){
    for (MyStructure *i = timeStamps; i < timeStamps + arrayLength; i++) {
        if (i->isUsed == true) {
于 2013-03-03T21:36:15.787 回答