不拦截网站的浏览器,沧州网络推广公司,个人博客网站备案吗,福田做商城网站建设多少钱这是我的一些二重指针的一些经验,希望对大家有帮助,如有啥错误或者更好的想法希望能指出,共同进步,谢谢
#include<stdio.h>
void change(int *p) //函数参数为整形指针,p v,即 p和v都指向变量num
…
这是我的一些二重指针的一些经验,希望对大家有帮助,如有啥错误或者更好的想法希望能指出,共同进步,谢谢
#include<stdio.h>
void change(int *p) //函数参数为整形指针,p = v,即 p和v都指向变量num
{*p = 2; //修改*p的值也修改了num的值printf("p = %d\n",*p);
}int main()
{ int num = 1; //声明一个整形变量numint* v = # //令指针v指向num变量printf("num1 = %d\n",num); //输出num的值change(v); //调用函数printf("num2 = %d\n",num); //输出函数调用的num变量return 0;
}
编译结果是num1 = 1,p = 2,num2 = 2
通过以上代码可以看出,通过调用函数实现改变了num的值,是通过在函数里面创建一个新的指针指向num,从而修改num的值并没有改变指针v的指向,v还是指向num。
#include<stdio.h>
void change(char *p)
{p = "bbb"; //令字符型指针p指向字符串"bbb"printf("p = %s\n",p);
}int main()
{ char *v = "aaa"; //创建字符型指针,指向"aaa"这个字符串printf("v1 = %s\n",v);//使用v而不是用*v的原因是,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); //传入指针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",真正实现改变了指针的值
由此总结,当想用函数改变指针的指向时,函数参数应该是双重指针。当想用函数改变指针指向的元素的内容时,函数参数是指针就可了