3 回答
TA貢獻1833條經驗 獲得超4個贊
每個星應該被讀作“指針指向”所以
char *foo;
是“指針foo指向的字符”。然而
char *** foo;
是“指向指向指針foo的指針指向的字符”。因此foo是一個指針。在該地址是第二個指針。在指向的地址是第三個指針。取消引用第三個指針會產生一個char。如果這就是它的全部內容,很難為此做出很多貢獻。
不過,它仍然可以完成一些有用的工作。想象一下,我們正在編寫bash或其他一些過程控制程序的替代品。我們希望以面向對象的方式管理流程的調用...
struct invocation {
char* command; // command to invoke the subprocess
char* path; // path to executable
char** env; // environment variables passed to the subprocess
...
}
但是我們想要做一些奇特的事情。我們想要一種方法來瀏覽每個子進程看到的所有不同的環境變量集。為此,我們env將調用實例中的每組成員收集到一個數組中env_list,并將其傳遞給處理該數組的函數:
void browse_env(size_t envc, char*** env_list);
TA貢獻1842條經驗 獲得超22個贊
指針只是一個保存內存地址的變量。
因此,當您想要保存指針變量的地址時,可以使用指向指針的指針。
如果要返回指針,并且已經在使用返回變量,則會傳入指針的地址。然后該函數取消引用此指針,以便它可以設置指針值。即該函數的參數將是指向指針的指針。
多級間接也用于多維數組。如果要返回二維數組,可以使用三重指針。當將它們用于多維數組時,盡管在遍歷每個間接層時都要小心地進行強制轉換。
以下是通過參數返回指針值的示例:
//Not a very useful example, but shows what I mean...
bool getOffsetBy3Pointer(const char *pInput, char **pOutput)
{
*pOutput = pInput + 3;
return true;
}
你這樣稱呼這個函數:
const char *p = "hi you";
char *pYou;
bool bSuccess = getOffsetBy3Pointer(p, &pYou);
assert(!stricmp(pYou, "you"));
- 3 回答
- 0 關注
- 490 瀏覽
添加回答
舉報
