黑马程序员——用函数实现两变量值交换

来源:互联网 发布:用mac可以玩的游戏 编辑:程序博客网 时间:2024/06/13 23:13

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一 .以下是两种错误的写法,无法实现两变量值的交换

1.a和b值不变

void swap1(int a,int b){    int temp;    temp = a;    a = b;    b = temp;}int main(int argc, const char * argv[]) {    int a = 4,b = 5;  // a = 5,b = 4    printf("交换前:a = %d,b = %d\n",a,b);    swap1(a,b);    printf("交换后:a = %d,b = %d\n",a,b);    return 0;}

swap1函数实现的是形参ab值得交换,跟实参没有关系,所以交换前后打印结果不变。

2.交换形参的地址,并未改变a,b的值

void swap2(int *p<span style="font-family: Arial, Helvetica, sans-serif;">,int *p1){</span>    int *temp;    temp =p;    p= p1;    p1= temp;}int main(int argc, const char * argv[]) {    int a = 4,b = 5;  // a = 5,b = 4    printf("交换前:a = %d,b = %d\n",a,b);    swap2(&a,&b);    printf("交换后:a = %d,b = %d\n",a,b);    return 0;}

二.正确写法

通过指针直接修改变量的值。

void swap3(int *p<span style="font-family: Arial, Helvetica, sans-serif;">,int *p1){</span>    int temp;    temp =*p;    *p= *p1;    *p1= *temp;}int main(int argc, const char * argv[]) {    int a = 4,b = 5;  // a = 5,b = 4    printf("交换前:a = %d,b = %d\n",a,b);    swap3(&a,&b);    printf("交换后:a = %d,b = %d\n",a,b);    return 0;}
改变两个地址所指向的内容,即改变a和b的值。




0 0
原创粉丝点击