黑马程序员——用函数实现两变量值交换
2015-07-05 11:11
393 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
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函数实现的是形参a和b值得交换,跟实参没有关系,所以交换前后打印结果不变。
2.交换形参的地址,并未改变a,b的值
改变两个地址所指向的内容,即改变a和b的值。
一 .以下是两种错误的写法,无法实现两变量值的交换
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函数实现的是形参a和b值得交换,跟实参没有关系,所以交换前后打印结果不变。
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的值。
相关文章推荐
- 操作系统常见面试的一些基础知识整理
- 论程序员在当今社会的重要性
- iOS面试题归总
- 面试题30:最小的k个数
- 为什么中国的程序员总被称为码农?
- PHP面试题遇到的几个坑。...面壁ing
- 黑马程序员——指针的应用
- 揭秘程序员大脑编程的七大“误区
- 程序员节,你造吗?
- 程序员的工资有多高?你是否该跳槽了!
- 近一个月的面试总结
- 黑马程序员----继承3(内部类、异常、包)
- 黑马程序员——OC基础学习(六)---Foundation框架的常用类
- 【剑指Offer学习】【面试题37:两个链表的第一个公共结点】
- 【剑指Offer学习】【面试题36:数组中的逆序对】
- 【剑指Offer学习】【面试题35:第一个只出现一次的字符】
- 摘录-IT企业必读的200个.NET面试题-07 .NET多线程编程
- 黑马程序员——Java基础--IO流(一)
- #程序员健康 如何解救你的鼠标手
- IOS面试题(五)