用指针实现数字a和数字b的互换
来源:互联网 发布:淘客qq群发软件 编辑:程序博客网 时间:2024/05/29 07:37
声明:本文所用的代码来自郝斌老师的C语言自学视频
我是一名C语言的初学者,非常喜欢听郝斌老师的C语言视频课程,今天下午我终于弄明白怎样使用指针来实现数字 a 和 数字 b 的互换了。
其实,这是个非常简单的程序,可以不用写任何函数就能实现的程序:
int main(void)
{
int a = 3;
int b = 5;
int t;
t = a;
a = b;
b = t;
printf("a = %d, b = %d\n", a, b);
}
上面的程序就完全可以实现数字 a 和数字 b 的互换功能的,但是为了深刻的理解指针的重要作用,我们要尝试利用指针来实现数字 a 和数字 b 的互换功能。
首先来看下面的程序:
void swap_1(int p, int q)
{
int k;
k = p;
p = q;
q = k;
return;
}
int main(void)
{
int a = 3;
int b = 5;
swap_1(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
这个程序乍一看是合理的,其实,它并不能实现数字 a 和 数字 b 之间的转换。原因如下:
程序从 main 函数进入,当程序执行到 swap(a, b) 时,程序会把变量 a 的值 3 发送给变量 p ,把变量 b 的值发送给变量 q, 而 swap 函数实现的功能是将变量 p 和变量 q 的互换,而变量 a 和变量 b 的值并没有互换。(因为我们只是将 a 的值 3 和 b 的值 5 分别发送给了内存的另一个变量区域了,而 a 和 b 所在位置的变量区域的值并没有改变)。
需要明确的是,我们 需要互换的是位于变量 a 和变量 b 处的区域内部的值互换(我们要互换的是变量的内容)。那么怎样实现内存中变量 a 所在的区域的值和变量 b 所在区域的值的互换呢?什么能和变量的位置(专业一点说是地址)来扯上关系呢,这就是我们要用到的指针了。
首先我们写一个新的互换函数,名字就叫 swap_2。看下面的程序吧:
void swap_2(int * p, int * q)
{
int k;
k = * p;
* p = * q;
* q = k;
return;
}
int main(void)
{
int a = 3;
int b = 5;
swap_2(&a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
这个程序是这样理解的:
p 是一个指针变量,指向的是变量 a 的地址,比如说我们可以姑且把 a 的地址假定叫做 1000H, q 也是一个指针变量, 指向的是变量 b 的地址, 我们姑且可以把 b 的地址假定叫做 2000H。当程序执行到 swap_2(&a, &b) 这一行时,就会把 a 的地址 1000H 和 b 的地址 2000H 分别发送给 int * 型的变量 p 和 q。而 *p 和 *q 是等同于变量 a 和 b 的。所以, a 和 b 的内容就实现互换了。swap 函数处理的是 a 和 b 内存区域中的内容,所以要把地址发送给函数 swap_2。
- 用指针实现数字a和数字b的互换
- 用指针解决输入a和b两数字,按先后大小输出a和b
- 字符串和数字的互换
- Shell实现数字互换和字母大小写互换
- 日期和数字的格式互换
- 用位运算将a和b的值互换
- 数字与字符串的互换
- 4和7为幸运数字,判断[a,b]之间所有由幸运数字组成的数字的个数
- 给你两个数 a 和 b , 请你计算 a b 之间所有数的数字之和
- 从键盘任意输入数字a和b,并计算出a的b次方等于多少
- 比较两个数字a,b的大小
- a,b间回文数字的个数
- 获取A-B数字之间的质数
- 输入两个数A,B,输出A+B的值2(用数字控制组数)
- excel中列字母和数字互换
- excel中时间和数字互换
- 使用库函数将字符串和数字互换
- 数字二进制位的奇偶位互换
- 辛承龙:Think! Create! Share!
- Py2exe使用教程(三)——Py2exe和Win32ui
- robots协议 用法
- cocos2D(五)---- CCNode
- Codeforces Round #148 (Div. 1)
- 用指针实现数字a和数字b的互换
- 分库分表最佳实践大总结
- 怎么把数组转化成字符串呢?有没有现成的函数呢?
- Android项目架构图
- 定制你自己的Andoird桌面Launcher
- 网页常用js
- http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
- Java中对象的比较
- 数归学习笔记