这是我的一些二重指针的一些经验,希望对大家有帮助,如有啥错误或者更好的想法希望能指出,共同进步,谢谢
#include<stdio.h>
void change(int *p)
{
*p = 2;
printf("p = %d\n",*p);
}
int main()
{
int num = 1;
int* v = #
printf("num1 = %d\n",num);
change(v);
printf("num2 = %d\n",num);
return 0;
}
编译结果是num1 = 1,p = 2,num2 = 2
通过以上代码可以看出,通过调用函数实现改变了num的值,是通过在函数里面创建一个新的指针指向num,从而修改num的值并没有改变指针v的指向,v还是指向num。
#include<stdio.h>
void change(char *p)
{
p = "bbb";
printf("p = %s\n",p);
}
int main()
{
char *v = "aaa";
printf("v1 = %s\n",v);
change(v);
printf("v2 = %s\n",v);
return 0;
}
编译结果:v1 = aaa,p = bbb,v2 = aaa
编译结果与预期不符,以为v2会是"bbb",却与意向的结果不一致。原因是在change函数里把指针v赋值给指针p,然后指针p又指向了"bbb",所以指针v还是指向"aaa"
把上述代码做一个小小的修改如下
#include<stdio.h>
void change(char **p)
{
*p = "bbb";
printf("p = %s\n",*p);
}
int main()
{
char *v = "aaa";
printf("v1 = %s\n",v);
change(&v);
printf("v2 = %s\n",v);
return 0;
}
编译结果:v1 = aaa,p = bbb,v2 = bbb
在change函数中,声明了一个双重指针p,p是指向指针的指针,他存放着指针的地址,在本例中,p也就存放着指针v的地址,p也就是指针v,即p = v。函数change中*p = “bbb"也就等于v = “bbb”。
指针v指向了字符串"bbb”,不再指向字符串"aaa",真正实现改变了指针的值
由此总结,当想用函数改变指针的指向时,函数参数应该是双重指针。当想用函数改变指针指向的元素的内容时,函数参数是指针就可了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)