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 回答
1

table->data是类型的tVideo*,所以table->data[i]也是类型的tVideo。要返回指向数组条目的指针,您需要获取该条目的地址

if(table->data[i].mediaID == id) return &table->data[i];
于 2013-05-30T11:16:02.417 回答