通过地址传递参数,为什么&(* v)无效?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过地址传递参数,为什么&(* v)无效?相关的知识,希望对你有一定的参考价值。
我正在尝试使用C编程按地址传递函数自变量,以避免创建副本。
我正在这样做:
void change(int *v)
(*v) = (*v) + 1;
void value(int *v)
printf("%i\n", *v);
change(v);
printf("%i\n", *v);
change(&(*v));
printf("%i\n", *v);
int x = 89;
value(&x);
输出为:
899091
有人可以向我解释为什么v和&(* v)都可以作为改变的理由吗?
我原以为只有v是正确且有效的参数...
答案
如果*v
合法,则&*v
等效于v
。 &
是*
的倒数。
int *v = &x;
v; // address of x
*v; // x
&*v; // address of x
另一答案
在您的代码中,当您将&x
传递给函数value
时,这就是您所得到的:
v=&x
*v = x
&(*v)=&x
以上是关于通过地址传递参数,为什么&(* v)无效?的主要内容,如果未能解决你的问题,请参考以下文章
什么是 Ruby Win32API 参数 |如何传递空指针?
Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)