黑马程序员——c语言基础:指针函数和函数指针

来源:互联网 发布:文字录入赚钱软件 编辑:程序博客网 时间:2024/05/01 21:57

1.指针函数

 指针函数:返回值是指针的函数。

 指针函数的定义:

   指针函数类型 *函数名(){

        return地址;

    }


实例1:用指针函数输出两个数中大数的地址。

#include <stdio.h>


int *bigAdress(int *a,int *b){

   return *a > *b ? a : b;

}


int main(int argc,const char * argv[]) {

    //定义并初始化两变量

   int a = 23;

   int b = 89;

    

    // 输出ab的地址

    printf("&a = %p\n&b = %p\n",&a,&b);

    

    //用指针函数找出大数的地址并输出

   printf("大数地址为:\n%p",bigAdress(&a,&b));

   return 0;

}


实例2:通过指针函数,输入一个1~7之间的整数,输出对应的星期名。

#include <stdio.h>


char *printDay(int n){

    //定义一个字符串指针数组

    char *week[7] = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

   return n > 0 && n <8 ? week[n - 1] :"输入错误!";

}

int main(int argc,const char * argv[]) {

    //根据输入的整数输出对应星期名

   printf("%s",printDay(7));

   return 0;

}


实例3:用指针变量作为函数的参数,求出10个数的最大值。

#include <stdio.h>


/**

 *  找出数组中的最大值

 *

 *  @param a   传入的数组

 *  @param len 数组长度

 *

 *  @return 最大值

 */

int max(int *a,int len){

    //定义变量储存最大值

   int max = *a; // 初始化为数组首元素

    // 找出最大值

   for (int i =1; i < len; i ++) {

       if (*(a +i) > max) {

            max = *(a + i);

        }

    }

   return max;

}

int main(int argc,const char * argv[]) {

    //定义并初始化一个数组

   int a[10] = {12,23,34,13,999,4,0,-45,9,10};

    

    //调用函数找出最大值

   int m = max(a,10);

    

    // 输出最大值

   printf("%d", m);

   return 0;

}



2.函数指针

 函数指针变量:存放函数的首地址的指针变量就是函数指针变量。

 函数指针变量的定义

   返回值类型 (*变量名)(函数的参数);

    int (*p)(int a, int b); //定义了一个函数指针p,可以存放返回值为int类型,并且有两个int类型的形参的函数

    int (*p1)(int ,int ); //定义函数指针的时候,可以不用写形参名

 函数指针的初始化

    p = sum; // sum是函数名,存的就是函数在内存中的首地址

 函数指针的使用

    1)定义函数指针

    2)给函数指针初始化

    3)用函数指针间接调用函数

 注意:

    1)函数指针变量不能进行算术运算

    2)函数调用中“(*指针变量名)”的括号不可少


函数指针的使用举例

#include <stdio.h>


// 定义函数

int sum(int a,int b){

   return a + b;

}

int main(int argc,const char * argv[]) {

    // 定义函数指针

   int (*p)(int ,int );

    

    //给函数指针初始化

    p =sum;

    

    //用函数指针间接调用函数

    int s = p(23,89);// 也可以写成(*p)(23,89);

   printf("%d", s);

   return 0;

}


0 0