如何用函数动态传递内存

实例一:

#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

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

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

 

转载于:https://www.cnblogs.com/wuyepeng/p/9860666.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,globals() 函数返回当前全局作用域中定义的所有变量和函数的字典。可以使用这个函数动态生成共享内存列表。 共享内存是一种在多进程编程中实现进程间通信的方式。多个进程可以访问同一个内存区域,从而实现数据共享。 下面是一个使用 globals() 函数动态生成共享内存列表的示例代码: ```python import multiprocessing def worker(shared_list): for i in range(len(shared_list)): shared_list[i] *= 2 if __name__ == '__main__': # 动态生成共享内存列表 shared_list = multiprocessing.Manager().list(globals()['my_list']) # 创建多个进程并启动 processes = [] for i in range(4): p = multiprocessing.Process(target=worker, args=(shared_list,)) p.start() processes.append(p) # 等待所有进程结束 for p in processes: p.join() # 打印共享内存列表 print(shared_list) ``` 在这个示例中,我们首先定义了一个普通的列表 my_list,然后使用 multiprocessing.Manager().list() 函数将其转换为共享内存列表 shared_list。注意,这里我们使用 globals() 函数来获取当前模块的全局变量字典,从而可以获取 my_list 变量。 接下来,我们创建了四个进程,并将共享内存列表作为参数传递给 worker 函数。在 worker 函数中,我们简单地将共享内存列表中的每个元素乘以 2。 最后,我们等待所有进程结束,然后打印共享内存列表。可以看到,由于共享内存列表被多个进程访问,每个进程对其所做的修改都会影响到其他进程。因此,最终打印出来的列表中,每个元素都被乘以了 2。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值