在C中返回指针

时间:2013-05-30 10:50:49

标签: c pointers return structure

这是我第一次问这里。 我只是想知道这段代码的“返回”是否正确,特别是第一个。

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;

2 个答案:

答案 0 :(得分: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];

但是,typedef tTblVideo表示data成员是指向tVideo的指针。你的函数不会编译。最小的修正是使用正确的结构成员访问运算符,并返回找到的元素的地址。

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

答案 1 :(得分:1)

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

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