2013-03-03 45 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