zoukankan      html  css  js  c++  java
  • 如何用函数动态传递内存

    实例一:

    #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

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

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

  • 相关阅读:
    bzoj 1016 JSOI2008 最小生成树计数
    bzoj 1070 SCOI2007 修车
    bzoj 1042 HAOI2008 硬币购物
    bzoj 1132 POI2008 Tro
    bzoj 1227 SDOI2009 虔诚的墓主人
    bzoj 1024 SCOI2009 生日快乐
    1103 POI2007 大都市meg
    bzoj 1009:[HNOI2008]GT考试
    noip2006T1 能量项链
    bzoj 1006: [HNOI2008]神奇的国度
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/9860666.html
Copyright © 2011-2022 走看看