指针作为函数参数
[09-12 13:08:20] 来源:http://www.88dzw.com 电路基础 阅读:8474次
文章摘要:指针作为函数参数大多数C程序员开始使用指针时是用它们实现函数的参数,所谓可变参数。为了理解可变参数是如何工作的,我们看看在C语言中如何执行一个交换函数。要执行一个交换函数,您要做的是引入两个变量,让函数交换它们的值。这里是一个执行交换函数的试验——输入并执行以下代码,看看会发生什么:#include void swap(int i, int j){int t;t=i;i=j;j=t;}void main(){int a,b;a=5;b=10;printf("%d %dn", a, b);swap(a,b);printf("%d %dn
指针作为函数参数,标签:电子电路基础,模拟电路基础,http://www.88dzw.com指针作为函数参数
大多数C程序员开始使用指针时是用它们实现函数的参数,所谓可变参数。为了理解可变参数是如何工作的,我们看看在C语言中如何执行一个交换函数。要执行一个交换函数,您要做的是引入两个变量,让函数交换它们的值。这里是一个执行交换函数的试验——输入并执行以下代码,看看会发生什么:
#include
void swap(int i, int j)
{int t;t=i;i=j;j=t;}
void main()
{int a,b;a=5;b=10;printf("%d %dn", a, b);swap(a,b);printf("%d %d n", a, b);}
执行程序后您会发现变量并没有被交换。a和b的值是传入了swap,而且交换函数确实交换了它们。但是函数返回后实际上没有产生任何效果。 要使函数正确工作您可以使用指针,如下所示:
#include
void swap(int *i, int *j)
{int t;t = *i;*i = *j;*j = t;}
void main()
{int a,b;a=5;b=10;printf("%d %dn",a,b);swap(printf("%d %d n",a,b);}
为了了解上面代码的工作过程,让我们把它画在纸上。先画出两个方框代表整数a和b,分别在里面填上5和10;再画出指针i和j,还有整数t。swap函数被调用时接受的参数是a和b的地址。所以i指向a(从i到a引一箭头),j指向b(从b到j引另一箭头)。当函数调用完成指针的初始化以后,*i就成为a的另一个名字,*j也成为b的另一个名字。现在开始执行swap的代码。代码中用到的*i和*j其实就是a和b。函数完成时,a和b就被交换了。
如果您在调用交换函数的时候,不小心忘记了&,使交换行不小心成了这样子:swap(a,b);。这会导致段错误。当您忘记使用&的时候,引入的便是a的值,而不是a的地址。因此,i指向了内存中一个无效的地址,当使用*i的时候系统就会崩溃。
因为同样的原因,如果您在引入的变量中忘记了&,scanf函数也会崩溃。scanf函数使用指针将它读取的值,返回给您引入的变量。没有了&,scanf就引入了一个错误的地址,并导致崩溃。
可变参数是C语言指针最普通的用法之一。
Tag:电路基础,电子电路基础,模拟电路基础,电路基础
- 上一篇:C语言入门教程-动态数据结构
《指针作为函数参数》相关文章
编辑推荐
分类导航
最新更新
- · 什么是系统仿真
- · 什么是CPCI
- · 英特尔 Parallel Composer入门
- · 什么是支持数据库,什么是中宏数据库
- · 什么是数据交换技术
- · 什么是内部数据传输率
- · 什么是空间数据交换中心
- · 什么是差异备份
- · 什么是备份集
- · 什么是映像备份
热门排行
- · IGBT模块
- · 什么是24脉波整流变压器
- · 自动变速器不能强制降挡故障原因、诊断与排
- · 什么是MD机
- · 中心频率,什么是中心频率
- · 功率单位mw和dbm的换算表
- · 中值滤波模块设计思路
- · 反馈振荡器的原理
- · 气体激光器简介
- · 数制与进位记数法