指针将参数传递给函数的过程分析
地址传递
在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(