您现在的位置: 华玉生活网 >> 技术文库 >> 基础 >> 正文>> 繁体中文

指针作为函数参数

指针作为函数参数

大多数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 %d
n", a, b);swap(a,b);printf("%d %dn", 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 %d
n",a,b);swap(printf("%d %dn",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语言指针最普通的用法之一。


  • 扩展阅读
  • 上一个文章:
  • 【返回网站首页】 【返回基础】
  • 下一个文章:
  • 【字体: 】【】【发表评论】【加入收藏】【告诉好友】【打印此文
    文章 软件 电影 商品

    相关文章

    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    | 服务声明 | 充值中心| 华安五金电器 | 收费标准| 论坛| 留言| 实用查询| 会员中心| 下载帮助| 设为首页|

    技术支持:瑞达科技 即时交谈QQ:237013889 QQ群:13810759 E-Mail:237013889@qq.com
    非盈利网站,如有侵权,请来信来电告知,第一时间处理,谢谢!
    桂ICP备17008104号 华玉生活网网站统计
    tj