标签:动态 两种 出现 行修改 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一直是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
所以,总的来说,用第二种方法更简洁,而且不易出错。
这题中,动态传递内存,本质上是要对指针进行修改,修改指针的方法有两种,一种是用双指针(即把待修改的指针整体看成一个变量),另一种方法是用指针的引用(即把指针看成一个变量,引用对变量的修改)
标签:动态 两种 出现 行修改 space style namespace 如何 memory
原文地址:https://www.cnblogs.com/wuyepeng/p/9860666.html