2013-06-28 227 views
0

從函數返回指針是否正確以下語法?從函數返回指針

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; 
} 
+11

提示 - 它不編譯沒有警告。這是什麼讓你覺得? –

+0

我正在向許多函數傳遞一個指向bmpfile_t的指針,只是想排除我做錯了的可能性。 –

+2

'bmp'是一個局部自動變量,初始化爲函數調用者傳入的值。 '&bmp'產生該局部變量的地址。你永遠不應該從一個函數返回一個本地自動變量的地址。 – jxh

回答

4

bmp已經具有類型bmpfile_t *,這是你想要返回什麼。所以只需return bmp

編輯:你目前試圖返回什麼,&bmp,是bmpfile_t *的地址,因此有bmpfile_t **,指向指針的指針。此外,正如其他人所指出的,&bmp將是地址bmp,這是您的函數中的本地堆棧變量。當你從函數返回時,這將會彈出,因此這個指針會指向一些無用的東西。因此,你不僅返回錯誤類型的東西,還會返回一些危險的東西。所以只需return bmp

+1

如果您想討論'&bmp'的類型,請+1。 –

+0

@larmans:你的願望是我的命令。 – amaurea

+0

我一直大膽地編輯出「清晰」,並給你+1。 –