2016-11-20 146 views
0

我正在學習,並試圖正確地理解與C.工作的這部分Ç - 與指針合作,指針在機能的研究論證

我做練習,並有寫一個返回圖像的功能,但有一個指針,指針必須存儲一個值以防出現錯誤。

參考:函數存儲在主文件包含的模塊中。

這裏是我的代碼簽名聲明:

Img imageFromFile(const char * filename, char ** messageErreur) { 

if (error) 
messageErreur = 1; //Trying to pass 1 has error code out of the function 

} 

,我不斷在得到這個消息時,我編譯:

img.c:148:23: attention : assignment makes pointer from integer without a cast 
    messageErreur = 1; //Trying to pass 1 has error code out of the function 

我不知道我是什麼注意確定我需要在主文件中聲明傳遞此函數。

這是一個指針指針,所以我想我需要創建一個類型爲char []的指針?

調用函數時傳遞地址「&指針」?

回答

2

調用者正在提供一個指向char指針的指針,換句話說,您已被授予將char *返回給調用者的能力。要做到這一點,首先取消引用字符**,然後*您想返回指定字符:

*messageErreur = "some string"; 
*messageErreur = someRuntimeAllocatedStringBuffer; 

一定要加倍小心,如果呼叫者給出的指針「一些錯誤信息」,他們不能修改(並且通常不會返回消息)。

+0

所以這是真的,我忘了考慮「一些字符串」是一個字符數組! – Cyberflow

1

messageErrueur是一個指向char指針的指針。該字符指針將指向一個可能是錯誤信息的字符串。因此,可以說,有函數之外聲明的錯誤消息:

char * error = "error message"

的imgFromFile,在那裏你指定messageErrueur裏面,你會作出messageErrueurerror這樣的:

messageErrueur = &error;

&符號(&)給出的地址char * errormessageErrueur,所以現在messageErrueur正在查看存儲在處的字符。

糾正我,如果我有任何誤解的問題。希望這可以幫助!