首页 > 电脑

用swap函数转换了指针所指向的数,为什么整形变量也调换了

更新时间2018-03-06 21:58:32

#include<stdio.h>

 

void swap(int *a,int *b)

{int tmp;

 tmp=*a;

 *a=*b;

 *b=tmp;

}

int main()

{int x;

 int y;

 int *px;

 int *py;

 scanf("%d",&x);

 scanf("%d",&y);

 px=&x;

 py=&y;

 swap(px,py);

 printf("%d",x);

 printf("%d",y);

 return 0;

}


  1. c语言中形参与实参的关系是:形参是实参的值副本。无论参数的类型是什么,传递到子函数中的形参只是实参的值。所以,在改变形参变量自身的值时,是与实参无关的。换句话说,形参的改变不会影响到实参。

    但,如果参数类型是指针类型,则可以通过对指针变量所指向的地址中的数据进行修改,达到改变实参地址中的数据目的。

    因此,使用SWAP函数进行数据交换时,必须保证两点:

    1. 参数必须是指针类型,指向待交换的数据

    2. 交换时,必须交换地址中的数据,而不是交换地址本身。

    参考代码:

    123456789101112131415161718192021//错误的交换代码1void swap1( int a, int b ) //参数不是待交换数据的指针{    int t=a;    a=b;    b=t;}//错误的交换代码2void swap2( int *a, int *b ) {    int *t=a;//交换形参变量本身    a=b;    b=t;}//正确的交换代码void swap( int *a, int *b ) {    int t=*a;//交换形参变量地址中的数据,指针变量不变    *a=*b;    *b=t;}


是这样的,swap函数有两个参数对吧,这两个参数是两个地址。

在你调用swap(px,py)的时候把整型变量x和y的地址作为了参数。

再来看swap的作用。

tmp=*a;

 *a=*b;

 *b=tmp;

星号a就是把a所指向地方存的值取出来的意思,取出来之后和b所指向的内容存的值交换了。

所以swap函数的作用是将参数*a,*b所指向的内容交换(此时a是x的地址,b是y的地址),自然也就是把两个整型变量x,y交换了。哦~亲~

上一篇:我的世界里如何设置弹出的对话内容?

下一篇:cssci数据库可以用citespace做category分析吗