#includevoid swap(int *a,int *b){ int *t; t=a; a=b; b=t; } int main(){ int x=3,y=5,*p=&x,*q=&y; swap(p,q); printf("%d,%d,%d,%d",*p,*q,x,y); }
#includevoid swap(int **a,int **b){ int *t; t=*a; *a=*b; *b=t; } int main(){ int x=3,y=5,*p=&x,*q=&y; swap(&p,&q); printf("%d,%d,%d,%d",*p,*q,x,y); }
上路两段代码有小小的不同,而这不同就会造成最后*p和*q的输出值不同
第一段代码会输出3,5,3,5
第二段代码会输出5,3,3,5
第一段代码中确实通过传参将x,y的地址传递过去了,也进行了交换但是为什么值没有变化呢,因为传递的是p,q指针中存储的地址,这是一个值,众所周知通过参数值传递,函数不能改变原先的值,也就是说函数运行完,p依旧指向x,q依旧指向y。
如果要通过函数改变值那就是要把存储要改变的值的地址传递过去就有了第二段代码,将p,q的地址值传递过去,然后通过将两者地址中存的x,y地址互换达到值交换的目的,要注意此时x,y的值没有变化。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)