首页 > 代码库 > swap函數 进阶探讨与实现
swap函數 进阶探讨与实现
相信下面這個C程序很多人都見過啦,當時自己看 美少女战士谭浩强 写的那本书上的解释,反正我当时是没看太懂具体是什么意思,谱架啊~~~
#include <stdio.h> void swap(int x, int y) { int temp = x; x = y; y = temp; } int main() { int n, m; while(~scanf("%d %d", &n, &m)) { swap(n, m); printf("%d <--> %d\n", n, m); } return 0; }
看结果,这个swap函数是一点用都没有啦,所以嘞,以下的程序就是帮助理解滴:
#include <stdio.h> void swap(int x, int y) { printf("The formal parameter X's address : %d\n", &x); printf("The formal parameter Y's address : %d\n", &y); printf("--------------------------------------------\n"); int temp = x; x = y; y = temp; printf("The formal parameter X's address : %d\n", &x); printf("The formal parameter Y's address : %d\n", &y); printf("--------------------------------------------\n"); } int main() { int n, m; while(~scanf("%d %d", &n, &m)) { printf("The actual parameter N's address : %d\n", &n); //呢个actual 同埋formal系实参,形参唧意思; printf("The actual parameter M's address : %d\n", &m); printf("--------------------------------------------\n"); swap(n, m); printf("%d <--> %d\n", n, m); } return 0; }
运行结果:
从运行结果可以看到实参与形参的地址是不一样滴,所以,你改变形参内存地址存储的值不会影响到实参内存地址中存储的值; 实参与形参的结合只是值传递,而不是地址传递;
所以从这个“实参向形参传递地址”这个思路当中可以实现swap函数的功能:
#include <stdio.h> void swap(int *x, int *y) { int temp = *x; *x = *y; *y = temp; } int main() { int n, m; while(~scanf("%d %d", &n, &m)) { swap(&n, &m); //传递的是地址,所以形參與实参对应共用同一段地址; printf("%d <--> %d\n", n, m); } return 0; }
#include <stdio.h> void swap(int &x, int &y) { int temp = x; x = y; y = temp; } int main() { int n, m; while(~scanf("%d %d", &n, &m)) { swap(n, m); printf("%d <--> %d\n", n, m); } return 0; }
悄悄告訴你,還有一種方法啦,哈哈:
#include <stdio.h> int swap(int &a, int &b) { a = a ^ b; b = a ^ b; a = a ^ b; } int main() { int n, m; while(~scanf("%d %d", &n, &m)) { swap(n, m); printf("%d <--> %d\n", n, m); } return 0; }
swap函數 进阶探讨与实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。