通过调用函数实现a与b的交换

来源:互联网 发布:spss中文版软件下载 编辑:程序博客网 时间:2024/06/05 15:22

刚才通过汇编大略理解C了语言的指针

如下题目可以更好的佐证:

 

void swap(int i, int j)

{

    int temp;

    temp = i;

    i = j;

    j = temp;

}

int main(void)

{

    int a = 2, b = 3;

    swap(a, b);

    printf("a = %d, b = %d/n",a b);

    return 0;

}

 

实际上只是交换了swap函数中的i和j,而调用完swap函数而回到main函数后,i和j的生命期已经结束了,不会影响a和b。

(通过反汇编)也就是说,swap函数只是交换了a和b的副本。

 

可做如下修改即可:

 

 

void swap(int *i, int *j)

{

    int temp;

    temp = *i;

    *i = *j;

    *j = temp;

}

int main(void)

{

    int a = 2, b = 3;

    swap(&a, &b);

    printf("a = %d, b = %d/n",a b);

    return 0;

}

 

用变量a和b的首地址传参,用指针变量接受参数,改变的就是a和b地址存放的内容,即a与b的值在swap函数体内实现交换。