c++,二级指针为什么也能修改地址
疑问1:指针在此函数内为局部变量,为什么二级指针修改地址后,能传回主函数?疑问2:二级指针是指向一级指针的地址,如何修改实参的地址?...
疑问1:指针在此函数内为局部变量,为什么二级指针修改地址后,能传回主函数?
疑问2:二级指针是指向一级指针的地址,如何修改实参的地址? 展开
疑问2:二级指针是指向一级指针的地址,如何修改实参的地址? 展开
展开全部
举个例子可能更容易懂些:
void mc(int *&p,int *&q)
{
int *f=p;
p=q;
q=f;
}
void main()
{
int a=1,b=2;
int *p1=&a,*q1=&b;
mc(&p1,&q1);
cout<<*p<<*q;
}
函数在执行前各地址指向为:
p->p1的地址 p1->a的地址 a->值1
q->q1的地址 q1->b的地址 b->值2
函数在执行后各地址指向为:
p->q1的地址 p1->a的地址 a->值1
q->p1的地址 q1->b的地址 b->值2
可以看到,mc函数只改变了两个形参的指向,
并未对调用者的指针p1 q1造成影响,
这里改变的是指针的值(即指针内存储的地址的值)。
void mc(int *&p,int *&q)
{
int *f=*p;
*p=*q;
*q=f;
}
void main()
{
int a=1,b=2;
int *p1=&a,*q1=&b;
mc(&p1,&q1);
cout<<*p<<*q;
}
函数在执行前各地址指向为:
p->p1的地址 p1->a的地址 a->值1
q->q1的地址 q1->b的地址 b->值2
函数在执行后各地址指向为:
p->p1的地址 p1->b的地址 b->值2
q->q1的地址 q1->a的地址 a->值1
在mc函数中,进行交换的为*p和*q,即p1和q1中的值,
也就是a和b两个整数的地址。达到了修改指针的指向
从而交换值的目的。
void mc(int *&p,int *&q)
{
int *f=p;
p=q;
q=f;
}
void main()
{
int a=1,b=2;
int *p1=&a,*q1=&b;
mc(&p1,&q1);
cout<<*p<<*q;
}
函数在执行前各地址指向为:
p->p1的地址 p1->a的地址 a->值1
q->q1的地址 q1->b的地址 b->值2
函数在执行后各地址指向为:
p->q1的地址 p1->a的地址 a->值1
q->p1的地址 q1->b的地址 b->值2
可以看到,mc函数只改变了两个形参的指向,
并未对调用者的指针p1 q1造成影响,
这里改变的是指针的值(即指针内存储的地址的值)。
void mc(int *&p,int *&q)
{
int *f=*p;
*p=*q;
*q=f;
}
void main()
{
int a=1,b=2;
int *p1=&a,*q1=&b;
mc(&p1,&q1);
cout<<*p<<*q;
}
函数在执行前各地址指向为:
p->p1的地址 p1->a的地址 a->值1
q->q1的地址 q1->b的地址 b->值2
函数在执行后各地址指向为:
p->p1的地址 p1->b的地址 b->值2
q->q1的地址 q1->a的地址 a->值1
在mc函数中,进行交换的为*p和*q,即p1和q1中的值,
也就是a和b两个整数的地址。达到了修改指针的指向
从而交换值的目的。
展开全部
我只回答第一个问题。最近在看玄幻小说,就借小说的一些概念说一说为什么别人看到这类代码时没有这种困惑。一看到&,就知道指针的本体来了,两个本体交换值,导致它们的指向作了交换,这是实实在在的变动。而你受了局部变量这个幻境的影响,没有看清代码的本质。对于这个一阶幻阵,破的方法很简单,就是上机调试,一步一步跟踪每个值的变化。如果修行了汇编这种地阶技能,就能清楚感知代码的五脏六腑,那么一切幻术将无所遁形。我说的幻术,指的是搞理论的人弄了什么形参,变参,实参一大堆概念,把初学者玩的团团转,还不如画个图出来,把数据在内存中的走向说一说。这么解释,你可满意?
更多追问追答
追问
int **p,**q,
int *f=*p,*p=*q,*q=f
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询