以下语法对于从函数返回指针是否正确?
bmpfile_t*
bmp_create_from_file(const char *filename, bmpfile_t *bmp)
{
FILE *fp;
fp = fopen(filename, "r");
bmp_get_header_from_file(fp, bmp);
bmp_get_dib_from_file(fp, bmp);
bmp_get_pixels_from_file(fp, bmp);
fclose(fp);
return &bmp;
}
答案 0 :(得分:4)
bmp
已经有类型bmpfile_t *
,这是您想要返回的内容。所以只需return bmp
。
编辑:您当前尝试返回的内容&bmp
是bmpfile_t *
的地址,因此类型为bmpfile_t **
,指针指针。此外,正如其他人所指出的那样,&bmp
将是bmp
的地址,它是函数中的本地堆栈变量。当你从函数返回时会弹出这个,因此指针指向无用的东西。因此,您不仅会返回错误类型的内容,而且还会返回危险的内容。所以只需return bmp
。