函数指针与指针函数和一个小作业

本文探讨了指针函数的本质,包括参数类型、返回值类型,并通过实例讲解了函数指针的定义和指向的类型。重点介绍了如何通过函数指针操作不同类型函数。此外,还解析了一系列关于指针、数组指针和函数指针数组的复杂示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针函数

    本质:指针函数,本质是函数 
    研究问题角度:
            (1) 参数个数及参数的类型
            (2) 返回值的类型

(1)什么是指针函数?

    返回值为指针的函数
    
    int* get_memory() //指针函数
    void* malloc(size_t size); //指针函数
    char* strcpy(char *dest, const char *src);//指针函数

(2)找到字符
例:
#include <stdio.h>
#include <stdlib.h>


int is_within(char* s, char ch)//ch是被查找的字符
{
    while(*s != '\0')
    {
        if(*s == ch)
            return 1;
        s++;//指针向后移动一个位置,指向下一个字符
    }
    return 0;
    /*
    // 方法一
    int i = 0;
    while(s[i] != '\0')
    {
        if(s[i] == ch)
            return 1;
        i++;
    }
    //如果程序能走到return 0,证明while循环遍历字符串都结束了,也没有执行return 1
    return 0;
    */


}

int main(int argc, const char *argv[])
{
    char a[100] = "hello world!!";
    char ch;
    printf("ret is %d\n",is_within(a,'z'));
    //请你输入一个字符串和要查找的字符
    printf("Please input string char:\n");
    scanf("%s",a);
    getchar();//吸收上一次输入字符串的回车产生的\n
    scanf("%c",&ch);
    printf("ch is %d\n",ch);
    printf("ret is %d\n",is_within(a,ch));
    return 0;
}

函数指针:

    本质是指针
    研究问题的角度:
    
        (1) 指针的类型是什么 
        (2) 指针指向的类型是什么
        
    当你确定了研究问题的角度,你也就确定了用手去挡住谁
    
    
    整型指针指向的是整型 
    数组指针指向的是数组
    函数指针指向的是函数


(1)定义函数指针

    void showStar();
    int getMax(int a, int b);
    int* get_memory() //指针函数
    void* malloc(size_t size); //指针函数
    char* strcpy(char *dest, const char *src);//指针函数
    
    如何定义一个函数指针,指向一个函数
    
    //函数的名字,就是函数在内存当中的首地址
    
    (1)复制这个函数声明,然后将函数的名字替换称为 (*p),就可以定义一个函数指针,指向这个函数
    
    void (*p)(); //类似于int* p;
    p = showStar;//类似于 p = &a; 
    
    
    void (*p)() = showStar;
    int (*p)(int, int) = getMax;
    int* (*p)() = get_memory;
    void* (*p)(int) = malloc; 
    char* (*p)(char *, char *) = strcpy;
    
    
    //函数指针: 指向的类型是一个 函数类型
    (1) 指针的类型是什么 
    (2) 指针指向的类型是什么
    int (*p)(int, int);

    
    //p的类型,用手挡住p int (*)(int,int)    printf("%d\n",sizeof(int (*)(int,int)));  //4 因为是指针类型,占4个字节
    //p指向的类型,用手挡住*p  int (int,int)
    
    int getMax(int a, int b)//问你 getMax的类型是什么  int (int,int) 是一个函数类型
    
    
    char* (*p)(char *, char *) //p是一个指向指针函数的函数指针
    //p的类型,用手挡住p char* (*)(char*,char*)
    //p指向的类型,用手挡住*p  int (int,int)
    
    

#作业:思考下面p代表的意义

//先找到本质 
// 数组 指针 函数 
//数组:用手挡住 数组名和元素个数找元素的类型
//指针:用手挡住p,找p的类型, 用手挡住*p,去找指针指向的类型
//函数: ()内必然是,参数列表,用手挡住函数名和参数列表,剩下的就是返回值的类型 

(1)int *p[3]; //元素个数为3的整型指针数组 元素类型int* 元素个数3个 
(2)int  (*p)[3]; //指向元素个数为3个int的数组指针 p的类型:int (*)[3] p指向的类型int [3]
(3)int *p(int); //参数为1个int,返回值为int*的 指针函数
(4)int (*p)(int);//函数指针 p的类型:int (*)(int) p指向的类型int (int)
//函数指针 指向的是参数为1个int,返回值为int类型的函数
(5)int *(*p)(int);//函数指针  p的类型:int *(*)(int) p指向的类型 int* (int)
//函数指针 指向的是参数为1个int,返回值为int*类型的 指针函数 
(6)int (*p[3])(int); //函数指针数组 元素个数 3, 元素类型 int (*)(int)
(7)int *(*p[3])(int); //函数指针数组 元素个数 3, 元素类型 int* (*)(int)
// 7 是函数指针数组,数组中的每个元素都是一个函数指针,函数指针指向的函数类型是指针函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值