- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
指针与函数
1.掌握指针变量为参数在调用函数和被调用函数之间的数据传递。
2.掌握函数返回地址值的方法。
3.掌握指向函数的指针及其运算。
4.能熟练运用指针变量完成C程序的编写。
1. 指针变量作为参数时实现数据传递
2.指向函数的指针及运算
3.函数返回地址值的方法
(一)导课
在C语言函数调用中,参数传递可以是一般变量的传递,也可以是地址的传递(指针)。
(二)课程要点
一、指针变量作为函数的参数
使用指针类型做函数的参数,实际向函数传递的是变量的地址。
【例1】定义一个函数,用指针变量作参数实现两个数据的交换。
#include stdio.h
void main()
{ void swap(int *pa,int *pb);
int a,b;
a=15;b=20;
printf(before swap a=%d,b=%d\n,a,b);
swap(a,b);
printf(after swap a=%d,b=%d\n,a,b);
}
void swap(int *pa,int *pb)
{ int t;
t=*pa;
*pa=*pb;
*pb=t;
}
其数据交换的变化过程如下图所示:
思考:将上面swap函数作以下修改,a,b的值是否发生了交换?
void swap(int *pa,int *pb)
{ int *t;
t=pa;
pa=pb;
pb=t; }
分析:如下图
pa pb pa pb
交换前 交换后
由图所知,交换后只是指针pa、pb的指向发生了变化,而a、b值并没有改变。
【例2】通过定义的函数,将数组a中所有数据按相反顺序存储。
#include stdio.h
void re(int *p,int n)
{ int *q,t;
q=p+n-1;
while(pq)
{ t=*p;
*p=*q;
*q=t;
p++;
q--;
}
}
void main()
{ int a[10],j,*r;
for(j=0;j10;j++)
scanf(%d,a[j]);
for(j=0;j10;j++)
printf(%d\t,a[j]);
printf(\n);
re(a,10);
for(r=a;ra+10;r++)
printf(%d\t,*r);
printf(\n);
}
二、返回指针值的函数
1、返回指针值的函数的定义形式:
类型名 *函数名(形参表)
{函数体}
说明:“类型名”表示返回的指针所指向的数据类型,“*”表示定义的函数是一个返回指针值的函数。
例如:int *min(int x,int y)
{ int *p;
……
return (p);
}
【例3】编写函数完成:在字符串中查找一个指定的字符,并将该字符的地址返回到调用函数。如果字符被查找到,请在调用函数中输出该字符及该字符起的字符串。
#include stdio.h
char *ch(char *str,char st)
{
while(*str!=st*str!=\0)
str++;
if(*str!=\0)
return (str);
}
void main()
{ char *p,*q,a[100],c;
gets(a);
p=a;
c=getchar();
q=ch(p,c);
printf(%c\n,*q);
printf(%s\n,q);
}
三、指向函数
文档评论(0)