2 回答

TA貢獻1725條經驗 獲得超8個贊
初始化這個工作可以交給使用這個函數的人來完成,也可以由寫這個函數的人來完成;并且在設計這個函數的時候就要確定好,指針參數是在外面初始化還是進了函數在初始化.通常"寫函數的人"和"使用函數的人"可能是同一個人,但是扮演著2種不同的角色
這一點在函數說明里要講清楚,這樣使用這個函數的人才知道該傳遞一個未初始化的指針參數還是傳遞一個已經初始化的指針參數.
就象MSDN文檔里關于函數的說明那樣,參數是什么,返回值是什么,函數作用是什么,使用時的注意點都寫得清清楚楚.這樣,使用這個函數的人就知道該傳遞一個怎樣的參數進去.
假如傳遞的是一個初始化的參數進去,那么在調用這個函數之前,必須有類似的初始化的操作
SimpleCat *theCat=new SimpleCat;//SimpleCat *theCat=(SimpleCat *)malloc(sizeof(SimpleCat));
或者SimpleCat aCat;SimpleCat *theCat=&aCat;
SimpleCat Frisky;
FunctionTwo (&Frisky);
這個就和"或者部分"的代碼差不多,省去了SimpleCat *theCat=&aCat這步,直接在調用函數的時候調用了&aCat;
因為返回的參數是一個地址,可以賦值給一個指針變量,該變量有沒有初始化都可以.沒有初始化的話相當于初始化,初始化了的話相當于重新賦值.

TA貢獻1886條經驗 獲得超2個贊
這是聲明,不是定義變量,沒有變量,何來初始化?你甚至可以把theCat去掉。
問題補充:
這是函數定義,你前面的是函數聲明。theCat指針變量的初始化是由主調函數完成的,FunctionTwo函數不必理會,也不應理會,直接拿來用就行。
添加回答
舉報