看板 C_and_CPP 關於我們 聯絡資訊
函數的 paremeter 就是區域變數, 是函數一執行幫你配置的 區域變數就是離開 function 會被釋放, 無法取值 這是因為它會幫你拷貝一份 argument 到 parameter 成為新的變數, 不管裡面放的是位址(指標)或是值 所以你要傳指標進去, 出來還要拿到同一個指標 就要用指標的指標.. 多包了一層 抽象上的意義就不太一樣.. ※ 引述《ThirdEmpire (我操你姐的國家暴力)》之銘言: : void getMem(char *ptr) : { : ptr = (char*)malloc(100); : } : main() : { : char *str = NULL; : getMem(str); : strcpy(str, "Hello C/C++ programming"); : printf("%s\n", str); : } : 直接說結果好了 : 為什麼這樣會當機? : 不是已經 call by pointer 了嗎 : ptr 應該會得到新 malloc 的那堆空間 : ================================== : 然後比較一下下面這題 : void getMem(char **ptr, int num) : { : *ptr = (char*)malloc(200); : } : main() : { : char *str = NULL; : getMem(&str, 200); : strcpy(str, "Hello C/C++ programming"); : printf("%s\n", str); : } : 為什麼這樣就可以順利印出 : Hello blah blah 那串? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.229.228.126 ※ 編輯: clanguage 來自: 61.229.228.126 (01/15 00:37)