第一个问题的答案,你已经得到了。
对于第二个问题,考虑三个变量,A,B,C,其中A & C是整数变量,B是整数指针。图片中显示了变量名称,它们的值和地址(假设看到一个内存映射) 。
看到这个代码
void fun(int *b,int *c)
{
printf("\nfun %d",*b);
b=c;
}
void fun1(int **b, int *c)
{
printf("\nfun1 %d",**b);
*b=c;
}
int main()
{
int a=10;
int c=200;
int *b=&a;
printf("\n %d %d %d",a,*b,c);
fun(b,&c);
printf("\n %d %d %d",a,*b,c);
fun1(&b,&c);
printf("\n %d %d %d",a,*b,c);
return 0;
}
在main()
,一个& c是本地整数变量,具有不同数据和b是整数指针。我们调用函数fun()
这样,
fun(b,&c);
因为,B是一个指针的话,我们是传递的(1000)b即地址的值。 因此,如果我们修改函数fun()
中的b,则该更改将仅反映在fun()
的内部。
现在我们调用函数fun1()
,
fun1(&b,&c)
在这里,我们传递b即(3000)的地址。所以,当我们修改fun1()
中的b时,我们也会在main()
中看到反射。
所以,按值传递意味着,我们希望使用值而不修改存在于调用函数(main()
)中的原始指针。但我们通过参考,当我们需要任何重大变化,应该反映在我们的调用函数(main()
)本身。
我希望,这清除了怀疑。
嗯......两者都在这里传递指针(“引用”)。你可以改变它们指向的东西('int'或'struct'),但是用双指针,你不能改变它们指向的地方。所以你的第二个问题是无意义的。你的第一个问题基本上误解了' - >'的用途,即在一个运算符中取消引用和查找属性。你总是可以做'(* head).data = 6;'如果你想看到'*'进行解引用。 – ShadowRanger
@ShadowRanger你的意思是 - *但是用双指针,你可以**改变他们指向的位置*? –
@AjayBrahmakshatriya:哎呀。很确定我的意思是键入*,但**没有**双指针... *。同样的想法。 – ShadowRanger