标签:
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -----
第一讲 指针函数
一、指针函数的概念
所谓函数类型是指函数返回值的类型,在c语言中允许一个函数的返回值是一个指针(地址),这种返回指针的函数称为指针型函数。
二、指针函数的定义
定义指针型函数的一般形式为:
int *sum(int a,int b){
}
类型说明符 *函数名(形参表){
/*函数体*/
}
注意:返回值是一个指针。
1 /*
2 指针函数:
3
4 返回值是指针的函数
5
6 指针函数的定义:
7
8 指针类型 *函数名(){
9
10 return 地址;
11 }
12
13 */
14 #include <stdio.h>
15
16 //返回的是两个数中大数的地址
17 //返回的是形参x和y的大数的地址
18 int *max(int x, int y){
19
20 printf("x = %p\n",&x);
21 printf("y = %p\n",&y);
22 return x>y?&x:&y;
23 }
24
25 int *max2(int *x, int *y){
26
27 printf("max x = %p\n",x);
28 printf("max y = %p\n",y);
29 return *x>*y ?x :y;
30
31 }
32 int main (int argc , const char * argv[]) {
33
34 //返回a 、b两个数中大数的地址
35 int a=3,b=4;
36 printf("a = %p\n",&a);
37 printf("b = %p\n",&b);
38 int *p = max2(&a,&b);
39 printf("p = %p\n",p);
40
41 return 0;
42 }
43 //证明了 调用函数的时候形参变量是新分配的空间
44 // 实参和形参只是值传递
应用题:
1 /*
2 思考&实现1:
3
4 通过指针函数,输入一个1~7之间的整数,输出对应的星期名。
5
6 */
7 #include<stdio.h>
8
9 char *getDay(int n){
10
11 //定义一个字符串指针数组
12 char *days[] = {
13
14 "星期一",
15 "星期二",
16 "星期三",
17 "星期四",
18 "星期五",
19 "星期六",
20 "星期日"
21
22 };
23
24 return n>=1&&n<=7?days[n-1]:"输出错误!";
25
26 }
27 int main (int argc,const char *argv[]){
28
29 printf("%s\n",getDay(3));
30 return 0;
31 }
32
33
34 /*
35 思考&实现2:
36
37 用指针变量作为函数的参数,求出10个数的最大值。
38 */
39
40 #include<stdio.h>
41
42 int getMax(int *p,int len){
43 int max = *p;
44 for(int i = 1;i<len;i++){
45 if(*(p+i)>max){
46
47 max = *(p+i);
48
49 }
50 }
51 return max;
52 }
53 int main(int argc,const char *argv[]){
54
55 int a[10]={123,35,65,485,554,12,354,471,74,111};
56 int m = getMax(a,10);
57 printf("m = %d\n",m);
58
59 return 0;
60 }
函数指针
一、函数指针
在c语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存的首地址。
我们可以把函数的这个首地址赋予一个指针变量,是该指针变量指向该函数。
然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。(存放函数的首地址的指针变量)
二、函数指针定义方法
函数指针变量定义的一般形式为:
类型说明符(*指针变量名)(函数的参数);
类型说明符表示返回值类型
"(*指针变量名)"表示“*”后面的变量是定义的指针变量。
最后的空括号是表示指针变量所指的是一个函数。
三、函数指针的初始化
函数的声明:
int sum(int a,int b); ----> 函数指针 int (*p1)(int a,int b);
//定义了一个函数指针 p1
//p1可以存放 返回值是int类型,并且有两个形参,形参的类型还都是int类型的函数的地址
//函数指针的初始化
p1 = sum; //sum存的就是函数在内存中的首地址。
int sum(int a,int b){
return a+b;
}
int main(int argc,const char *argv[]){
int x= 3,y =4;
int s = sum(x,y);
//定义函数指针
int (*p)(int a,int b);
//初始化函数指针
p = sum; //sum函数的首地址
// p = f1; 不可以的
//注意:定义函数指针的时候,可以不用写形参名
int (*p1)(int ,int );
p1 = sum;
return 0;
}
1 /*
2 函数指针的方法
3 简易计算器
4 */
5 #include <stdio.h>
6
7 // 简易计算器
8
9 int sum(int x,int y){
10
11 return x+y;
12
13 }
14 int jian(int x,int y){
15
16 return x-y;
17
18 }
19 int cheng(int x,int y){
20
21 return x*y;
22
23 }
24 int chu(int x,int y){
25
26 return x/y;
27
28 }
29
30 int main (int argc , const char * argv[]) {
31
32 //定义一个函数指针
33 int (*p)(int ,int );
34
35 switch(2){
36 case 1:
37 p = sum;
38 break;
39 case 2:
40 p = jian;
41 break;
42 case 3:
43 p = cheng;
44 break;
45 case 4:
46 p = chu;
47 break;
48
49 }
50 //(*p)(23,45)
51 int s = p(23,45);
52 printf("%d\n",s);
53
54 return 0;
55 }
标签:
原文地址:http://www.cnblogs.com/xiaokang520/p/5062328.html