2013-03-03 40 views
0

我有一个函数,它的指针结构的C指针算术和数组访问

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

有没有更好的方法来做到这一点?

回答

2

的说法timeStampsMyStructure*型的,这意味着这一行:

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

相当于:

MyStructure *myStructure = timeStamps + i; 

这也等价于:

MyStructure *myStructure = &timeStamps[i]; 

注意,在这个表达式:&(*(timeStamps + i)),所述timeStamps + i是一个指向指数为i(即该元件的地址),然后通过使用dereference operator (*)返回MyStructure类型的L值,然后通过使用地址的操作员(&),其等于所述地址检索该元素的地址解引用那timeStamps + i举行在开始。

0
MyStructure *myStructure = &timeStamps[i]; 
6
&(*(timeStamps + i)) 

相当于与

&timeStamps[i] 

这是反过来,干脆

timeStamps + i 

这是所有:)

0

曾经因为我在C工作过,但据我记得方括号索引操作符([])与添加到指针相同。所以:

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

因此,你应该能够使用

myStructure = &timeStamps[i]

0

我建议:

void Process(MyStructure *timeStamps, int arrayLength){ 
    for (MyStructure *i = timeStamps; i < timeStamps + arrayLength; i++) { 
     if (i->isUsed == true) { 
+0

为什么这是一个更好的解决办法?性能更高吗? – 2013-03-03 22:26:16