码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员-----指针函数和函数指针

时间:2015-12-21 01:52:45      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

------<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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!