网站大量收购闲置独家精品文档,联系QQ:2885784924

指针与函数.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
指针与函数ppt整理

实验16 指针与函数 16.2.1 指针作为函数参数 1. 形参的类型说明 函数的参数不仅可以是整型、实型、字符型等数据,也可以是指针类型。指针作为函数参数时,注意形参类型要声明为指针类型,如: void swap(int *x, int *y) /* 这里形参x、y要声明为指针类型 */ { 函数体 } 注意上述函数的形参是x、y,而不是*x、*y。 2. 函数调用 函数调用时,如果形参是指针类型,那么对应的实参也应该是一个指针值。如: swap(a, b); /* 实参是两个指针 */ swap(m, n); /* 实参是两个指针 */ 3. 指针作为参数的特殊性 通过指针作为函数参数可以传递一个指针给被调函数使用,但更重要的是其具有特殊性: 通过形参指针的指向运算,可以在被调函数中访问主调函数中的变量。 下面通过一个例子来说明。 #include stdio.h void ff1(int *x) /* 调用时x的值是a */ { *x=100; /* 这时的*x就是main中的a */ }? main() { int a=10; ff1(a); printf(a=%d\n,a); } 说明:语句ff1(a)执行时,实参a传递给形参x,因此ff1函数中的*x实际上就是main中的a, 结果main中的变量a被变成了100。? 例16.1用指针作为函数参数,编写程序通过函数交换两变量的值。 #include stdio.h void swap(int *x, int *y) { int temp; temp=*x; *x=*y; *y=temp; } ? 本程序先交换变量a和b的值,再交换变量c和d的值,结果输出: ? 程序说明:执行swap(a,b)时, a传递给形参x,b传递给形参y,因此swap函数中的*x、*y实际上就是main中的a和b,虽然swap函数中交换的是*x和*y的值,实际上等于交换main中的a与b的值。 同样,执行swap(c,d)时, c传递给形参x,d传递给形参y,这时swap函数中的*x、*y实际上就是main中的c和d,在swap函数中交换*x和*y的值,等同于在main中交换a与b的值。 4. 指针作为函数参数的应用 一个函数只能返回一个值,但是利用指针作为函数参数,可以从一个函数得到多个值。其方法是在主调函数中定义多个变量,并将其地址传给函数,然后在函数中给主调函数中的这些变量一一赋值。如: void fun(int *p1, int *p2, int *p3) { *p1=100; *p2=200; *p3=300; } main() { int x,y,z; fun(x, y, z); printf(%d %d %d\n, x,y,z); } 说明:main从fun函数得到了3个值,其实现手段是将x,y,z的地址分别传给p1,p2,p3,因此fun中的*p1,*p2,*p3就是main中的x,y,z,也就是说,在fun中完成了对main的变量x,y,z的赋值。 16.2.2 数组名作为函数参数 数组作为函数参数的方法是将数组名作为函数参数,而且数组作为函数参数有其特殊性:形参数组与实参数组是同一个数组。 假如有如下程序,main函数将数组a传递给fun函数中的形参b。 fun(int b[], int n) /* 形参b为数组 */ { …… } ?main() { int a[20];…… fun(a,20); /*数组名作为参数*/ …… } 那么,形参数组b与实参数组a是同一个数组,也就是说:a[i] 等同于b[i]。下面我们来说明一下这其中的道理。 ? 在C语言中规定:函数的形参int b[]等同于int *b,也就是说,所谓的“形参数组”实际上是一个指针变量。 另外,实参a是数组名,即数组的首地址。因此,表面上好像是实参数组a传递给形参数组b,实际上却是数组首地址a传递传给指针变量b。 对于指针b,也可以有表达式b[i],因为b[i]相当于*(b+i); 而b得到的值为a,所以*(b+i)就是*(a+i),即 a[i]。因此得到结论:a[i]等同于b[i]。 ? 16.2.3 函数返回指针值 如果一个函数的功能是为了求一个指针,它就可以返回一个指针值。这种函数的定义

文档评论(0)

zyzsaa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档