C语言 结构体struct成员函数(五)

本站已接入国内中文版 ChatGPT 镜像,欢迎大家前往体验《 国内中文 ChatGPT

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一.结构体struct前言

  1. C语言 结构体struct简介(一)
  2. C语言 结构体struct定义和使用(二)
  3. C语言 结构体struct数组(三)
  4. C语言 结构体struct指针(四)
  5. C语言 结构体struct成员函数(五)
  6. C语言 结构体struct嵌套(六)
  7. C语言 结构体struct值传递和址传递(七)

二.函数指针

在讲解结构体成员函数之前,我们先回忆一下《函数指针》《回调函数》相关知识内容,函数指针,其本质是一个指针,指向的是一个函数的地址。

基本声明形式:返回数据类型 + (*函数名) + (变量类型1,…);


1.常规函数声明

//返回int类型的常规函数
int fun(int x,int y);

2.函数指针声明

//返回int类型的函数指针
int (*fun) (int);

常规函数和函数指针区别: 函数指针声明的时候 * 需要和函数名用括号括起来(优先级原因)。

“函数类型”说明函数的返回类型,由于 () 的优先级高于 * ,所以指针变量名外的括号必不可少。


三.结构体struct成员函数简介

我们在 C 语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的。

C语言 结构体struct成员函数(五) 插图1

四.结构体struct成员函数使用


1.案例1

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 结构体struct成员函数(五)
//@Time:2021/11/08 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>

//枚举类型
typedef enum RECT_TYPE
{
    RECT_AREA = 0,  //面积
    RECT_LENGTH,    //周长
    
}RECT_TYPE;

//结构体计算矩形面积或者周长
typedef struct RECT
{
    int width;
    int height;
    int (*hander)(int w,int h); //成员函数
}RECT;


//计算面积
int area(int x,int y)
{
    return x*y;
}

//计算周长
int length(int x,int y)
{
    return (x+y)*2;
}


int main()
{
   /*  Write C code in this online editor and run it. */
 
   
	RECT rt = {  //指定结构体元素初始化
                    .width = 10,
                    .height = 20
                 };
    
    RECT_TYPE type = RECT_AREA;
    
    if(RECT_AREA == type)
    {
        rt.hander = area; //指向计算面积的函数指针
    }
    else if(RECT_LENGTH == type)
    {
        rt.hander = length; //指向计算周长的函数指针
    }
    else
    {
        printf("not support \n");
        return 0;
    }
    printf("计算结果 : %d \n",rt.hander(rt.width,rt.height));
	
   return 0;
}
/*
计算结果 : 200 
*/

2.案例2

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 结构体struct成员函数(五)
//@Time:2021/11/08 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>

//枚举类型
typedef enum RECT_TYPE
{
    RECT_AREA = 0,  //面积
    RECT_LENGTH,    //周长
    
}RECT_TYPE;

typedef int (*hander)(int w,int h);//函数指针

//结构体计算矩形面积或者周长
typedef struct RECT
{
    int width;
    int height;
    hander fn; //成员函数
}RECT;


//计算面积
int area(int x,int y)
{
    return x*y;
}

//计算周长
int length(int x,int y)
{
    return (x+y)*2;
}


int main()
{
   /*  Write C code in this online editor and run it. */
 
   
	RECT rt = {  //指定结构体元素初始化
                    .width = 10,
                    .height = 20
                 };
    
    RECT_TYPE type = RECT_LENGTH;
    
    if(RECT_AREA == type)
    {
        rt.fn = area; //指向计算面积的函数指针
    }
    else if(RECT_LENGTH == type)
    {
        rt.fn = length; //指向计算周长的函数指针
    }
    else
    {
	printf("not support \n");
        return 0;
    }
    printf("计算结果 : %d \n",rt.fn(rt.width,rt.height));
	
   return 0;
}
/*
计算结果 : 60 
*/

五.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C语言 main 函数参数 main(int argc, char *argv[])
  22. C语言 全局变量和局部变量区别
  23. C语言 static
  24. C语言 extern
  25. C/C++ Unicode 和多字节区别
  26. C/C++ wprintf 输出中文乱码
  27. C/C++ char 和 wchar_t 相互转换
  28. C/C++ NaN(Not a Number)
  29. C语言 枚举enum简介(一)
  30. C语言 枚举enum声明变量和使用(二)
  31. C语言 共用体union
  32. C语言 结构体struct简介(一)
  33. C语言 结构体struct定义和使用(二)
  34. C语言 结构体struct数组(三)
  35. C语言 结构体struct指针(四)
  36. C语言 结构体struct成员函数(五)
  37. C语言 结构体struct嵌套(六)
  38. C语言 结构体struct值传递和址传递(七)

本站已接入国内中文版 ChatGPT 镜像,欢迎大家前往体验《 国内中文 ChatGPT

文章版权声明 1、本网站名称:猿说编程
2、本站永久网址:https://www.codersrc.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容