码迷,mamicode.com
首页 > 其他好文 > 详细

如何用函数动态传递内存

时间:2018-10-27 13:13:29      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:动态   两种   出现   行修改   space   style   namespace   如何   memory   

实例一:

#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

所以,总的来说,用第二种方法更简洁,而且不易出错。

这题中,动态传递内存,本质上是要对指针进行修改,修改指针的方法有两种,一种是用双指针(即把待修改的指针整体看成一个变量),另一种方法是用指针的引用(即把指针看成一个变量,引用对变量的修改)

 

如何用函数动态传递内存

标签:动态   两种   出现   行修改   space   style   namespace   如何   memory   

原文地址:https://www.cnblogs.com/wuyepeng/p/9860666.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!