1. 程式人生 > >如何用函數動態傳遞內存

如何用函數動態傳遞內存

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一直是NULLstrcpy(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

所以,總的來說,用第二種方法更簡潔,而且不易出錯。

這題中,動態傳遞內存,本質上是要對指針進行修改,修改指針的方法有兩種,一種是用雙指針(即把待修改的指針整體看成一個變量),另一種方法是用指針的引用(即把指針看成一個變量,引用對變量的修改)

如何用函數動態傳遞內存