2

ここで質問するのは初めてです。このコードブロックの「リターン」、特に最初のブロックの「リターン」が正しいかどうかを知りたかっただけです。

tVideo* getVideo(int id, tTblVideo* table){
    tVideo* videoFound = NULL;
    int i;
    for(i = 0; i < table->length; i++){
        if(table->data[i]->mediaID == id) return *table->data[i];
    }
    return videoFound;
}

編集: tTblVideo 定義の追加:

typedef struct {
    /* Number of stored files */
    int length;

    /* Array of video files */
    tVideo *data;

} tTblVideo;
4

2 に答える 2

3

このコード行から:

    if(table->data[i]->mediaID == id) return *table->data[i];

これはtable->data[i]、メンバーを持つ構造体へのポインターであることが期待されることを示していますmediaID。ただし、returnステートメントはこのポインターを逆参照しています。つまり、構造体へのポインターではなく、構造体オブジェクトを返します。これに基づいて、値を次のように逆参照しないでくださいreturn

    if(table->data[i]->mediaID == id) return table->data[i];

ただし、typedeffortTblVideoは、dataメンバーが へのポインターであることを示していますtVideo。関数はコンパイルされません。最小限の修正は、適切な構造体メンバー アクセス演算子を使用し、見つかった要素のアドレスを返すことです。

    if(table->data[i].mediaID == id) return &table->data[i];
于 2013-05-30T11:03:34.563 に答える