【小白】c++这个函数写法有问题,为神摸

2024-12-04 15:47:47
推荐回答(2个)
回答1:

这样 char p[] = “Welcome to AMOI”; 是局部变量
函数结束之后就不存在了
返回的是野指针

char* GetMemory(void)
{
char *p = new char[100];
return p;
}
这样是可以的

至于为什么

因为 char p[] = “Welcome to AMOI”; 这样的是在栈上,栈是在程序运行开始的时候就分配好的一块内存
用于存放 函数的参数 函数内局部变量
函数结束以后 这块内存就又被用在其他函数中了

char p[] = “Welcome to AMOI”; 实际上是在编译时就计算出了需要多大地方
运行到这里 临时把“Welcome to AMOI”拷贝到栈内存 供你享用

char *p = new char[100];
这是在堆上分配一块内存
退出函数依然存在,你可以继续享用
直到用 delete[] 删除他

一时理解不了也没关系
这是计算机原理决定的,编程语言中的规则
慢慢学多了就明白了

回答2:

通俗点,返回数组p返回的是p[0]的地址,也就是数组p的首地址,而函数调用是在栈中,函数调用完数据要出栈,函数结束以后 这块栈内存就又被用在其他函数中了,这样的话,原有的数据就会被覆盖,也就是说数组p地址里存放的内容会被覆盖,内容就会是乱码。这是传地址(数组名就是地址)。
如果是传值(比如变量,常量)的话就不会错了。