指针将参数传递给函数的过程分析

本文详细分析了C++中指针如何作为参数传递给函数,包括地址传递原理,以及动态数组在函数中正确和错误的使用示例。通过实例展示了指针传递地址实现变量值的修改,并强调了动态数组使用时必须注意的内存管理问题。
摘要由CSDN通过智能技术生成

指针将参数传递给函数的过程分析

地址传递

在MFC框架下,展示了地址传递方式参与函数运算的过程。

void test(int *pmn)
{
   
	TRACE("&pmn=%x\n", &pmn);
	TRACE("pmn=%x\n", pmn);
	TRACE("*pmn=%x\n", *pmn);
}

int main()
{
   
	int n = 20;
	int *p = &n;
	TRACE("&p=%x\n", &p);
	TRACE("p=%x\n", p);
	TRACE("*p=%x\n", *p);
	test(p);
	return 0;
}

运行结果:

atlTraceGeneral - &p=0x4febb0
atlTraceGeneral - p=0x4febbc
atlTraceGeneral - *p=0x14
atlTraceGeneral - &pmn=0x4fe9bc
atlTraceGeneral - pmn=0x4febbc
atlTraceGeneral - *pmn=0x14

在指针给函数传递参数的时候,函数本身动态建立一个指针pmn,其地址为0x4fe9bc,然后将指针p的值(即p)复制给pmn(即pmn=p),因为p=&n,所以pmn=&n,此时p和指针pmn均指向n,所以,对*pmn操作可以改变n的值,这就是地址传递,传递的是n的地址。

动态数组(错误分析)

//目的是在test函数内根据需要创建数组,然后返回该数组的首地址
void test(char * pframe)
{
   
	TRACE("in-&pframe=%x\n", &pframe);
	TRACE(
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值