實例一:
#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
所以,總的來説,用第二種方法更簡潔,而且不易出錯。
這題中,動態傳遞內存,本質上是要對指針進行修改,修改指針的方法有兩種,一種是用雙指針(即把待修改的指針整體看成一個變量),另一種方法是用指針的引用(即把指針看成一個變量,引用對變量的修改)