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の型は ですMyStructure*。つまり、この行は次のようになります。

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

次と同等です。

MyStructure *myStructure = timeStamps + i;

これは以下と同等です:

MyStructure *myStructure = &timeStamps[i];

この式&(*(timeStamps + i))timeStamps + iは、 は index の要素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 に答える