【发布时间】:2013-05-25 21:54:59
【问题描述】:
这是我第一次在这里问。 我只是想知道这段代码的“返回”是否正确,尤其是第一个。
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;
【问题讨论】:
-
没有看到
tTblVideo就无法知道。它编译了吗? -
第二次返回总是给
NULL,因为没有设置videoFound。也就是说,提前退出是要走的路,所以这不是一个真正的问题;这只是一个不必要的变量。 -
@AndrejsCainikovs 如果循环很长,这可能会非常昂贵,并且如果有多次出现,也可能将语义从“返回第一个”更改为“返回最后一个”。换句话说,我完全不同意。早日回归很棒。
-
@Étienne - 返回 null 而不是指针是很好的惯用 C。看看
malloc。返回 -1 是等待发生的意外。 -
用
return NULL;替换return videoFound;,我会很高兴的。在这样一个非常简单的函数中,从循环中提前返回是完全可以的。
标签: c pointers return structure