如何用函數動態傳遞內存
阿新 • • 發佈:2018-10-27
namespace rcp ace 一個地方 true 雙指針 輸出 第一個程序 style
實例一:
#include<iostream> using namespace std; void GetMemory(char *p) { p = (char*)malloc(100); } int main() { char* str = NULL; GetMemory(str); char array[] = "hello"; strcpy(str, "hello"); printf("%s", str); return 0; }
上面這個程序出現的問題是:
GetMemory不能動態傳遞內存,str一直是NULL,strcpy(str,”hello”)會使得程序奔潰
如果要使得GetMemory能夠動態傳遞內存有兩種方法可是現實,第一種是用指針的指針來實現,另一種是用指針的引用來實現。
先說第一種,用指針的指針來實現的程序如下:相比第一個程序,這個程序需要做三個地方的修改
#include<iostream> using namespace std; void GetMemory(char **p)//第一個需要修改的地方 { *p = (char*)malloc(100);//第二個需要修改的地方 } int main() { char* str = NULL; GetMemory(&str);//第三個需要修改的地方 char array[] = "hello"; strcpy(str, "hello"); printf("%s", str); return 0; }
運行結果:輸出 hello
第二種是用哪個指針的引用來說實現的從程序如下:相比第一個程序,這個程序只需要做一個地方的修改
#include<iostream> using namespace std; void GetMemory(char *&p)//需要修改的地方 { p = (char*)malloc(100); } int main() { char* str = NULL; GetMemory(str); char array[] = "hello"; strcpy(str, "hello"); printf("%s", str); return 0; }
運行結果:輸出hello
所以,總的來說,用第二種方法更簡潔,而且不易出錯。
這題中,動態傳遞內存,本質上是要對指針進行修改,修改指針的方法有兩種,一種是用雙指針(即把待修改的指針整體看成一個變量),另一種方法是用指針的引用(即把指針看成一個變量,引用對變量的修改)
如何用函數動態傳遞內存