中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中的結構體內嵌函數如何使用

發布時間:2023-02-24 14:28:30 來源:億速云 閱讀:113 作者:iii 欄目:開發技術

今天小編給大家分享一下C語言中的結構體內嵌函數如何使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

C語言的結構體內嵌函數

看門見山

1.內嵌函數定義舉例:經過真實測試

在函數中聲明定義結構體

#include "fun_in_struct.h"
 
int main(int argc, char **argv) {
    //定義結構體指針或者結構體變量,分別用->和.進行內部元素的使用
    data_store_object *obj;
    char              *word;
 
    /*方法一:直接定義結構體指針然后用->對結構體變量和函數進行初始化
    word             = "nihao";
    obj              = calloc(1,sizeof(data_store_object));
    obj->word        = word;
    obj->count       = 24;
    obj->word_print  = WordPrint;
    obj->count_print = CountPrint;
    obj->word_print(obj->word);
    printf("%d\n",obj->count_print(obj->count));
    return 0;
    */
     /*方法二:直接定義結構體變量然后直接進行初始化,用    變量 = xxx;進行賦值
    data_store_object obj = {
        .word  = "nihao",
        .count = 12,
        .word_print  = WordPrint,
        .count_print = CountPrint
    };
    obj.word_print(obj.word);
    printf("%d\n",obj.count_print(obj.count));
    return 0;
    */
    /*方法三:直接定義結構體變量,然后使用    變量 : xx進行賦值
    data_store_object obj = {
        word  : "nihao",
        count : 33,
        word_print  : WordPrint,
        count_print : CountPrint
    };
    obj.word_print(obj.word);
    printf("%d\n",obj.count_print(obj.count));
    return 0;
    */

在頭文件中對結構體進行定義:  

typedef struct {
    char *word;
    int   count;
    void (*word_print)(char *word);
    int  (*count_print)(int count);
}data_store_object;

進行兩個函數的聲明,函數的定義發生在其他的源文件

void WordPrint(char *word);
int  CountPrint(int count);

2.內嵌函數的個人理解

C語言的結構體內部是可以定義函數的,就像java中定義方法一樣,我們在構建對象的時候不止是可以使用它的參數,還可以使用它內部關于數據的處理函數,java中叫做方法;但是C語言并不能實現類中方法的繼承,重載,重寫等特性,因此用的不是很多;

C語言是可以面向對象的,面向對象是一種思想,將事物和做事的過程定義成對象,只是C語言的語法讓面向對象變得不那么好用。

C語言是要轉化為匯編語言再轉化為機器語言運行的,在匯編語言中存在著聲明代碼段的過程,將一段匯編指令之前加上一個標號,而這個標號就是函數的名稱,我們所說的函數名實際上代表了一段構匯編指令的初始內存地址。那么變量可以附地址,函數也是可以的,有興趣的可以看一下匯編語言和C語言混合編程,就理解了內嵌函數中出現的函數指針。

結構體嵌套函數指針

這次來記錄一下結構體嵌套函數指針

這個知識點想了2天終于搞懂了。

先看代碼,試著理解一下,不理解再看我后面的解釋。

C語言中的結構體內嵌函數如何使用

解釋

首先,和平常創建一個結構體一樣,唯獨不同的就是里面的變量是一個函數指針,關于函數指針的內容,原理,我這里就不多解釋說明了,去搜一下都有很多。我們就簡單的理解為:函數指針=指向函數地址的指針變量。

所以這里的 void (*m_PrintInfo)();是一個變量,是一個變量,是一個變量(重要的事情說三遍)!

typedef struct{
    char m_title[20];
    char m_author[20];
    int m_pages;
    void (*m_PrintInfo)();
} BookType;

這個變量是干嘛的呢?是用來存放函數的入口地址的,每個函數都是有入口地址的。

BookType KEY[3]={
	{"KEY1","Author1",5,ON_OFF_Pro},
	{"KEY2","Author2",10,CAL_Pro},
	{"KEY3","Author3",15,MENU_Pro},
};

這段代碼,定義了3結構體數組,

  • 1.每個數組里面都有該結構體的成員

  • 2.每個數組里面都有該結構體的成員

  • 3.每個數組里面都有該結構體的成員(重要的事情說三遍)!

也就是說,都有這些元素,這樣好理解了吧。

KEY[0].m_title                            KEY[1].m_title                         KEY[2].m_title

KEY[0].m_author                       KEY[1].m_author                    KEY[2].m_author

KEY[0].m_pages                       KEY[1].m_pages                     KEY[2].m_pages

好,那么我們來看下面的這行代碼

KEY[0].m_PrintInfo();

那這里是調用了哪個函數呢?通過代碼可以知道,是調用了ON_OFF_Pro這個函數。所以執行調用這個結構體成員變量的時候,會調用這個函數,因為一開始已經把函數的入口地址分配好了,只需要調用結構體成員變量就能夠實現調用函數。

C語言中的結構體內嵌函數如何使用

-------------------------------------------------------- 分界線---------------------------------------------------------------

下面來看看實際項目按鍵的用法

C語言中的結構體內嵌函數如何使用

C語言中的結構體內嵌函數如何使用

以上就是“C語言中的結構體內嵌函數如何使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

个旧市| 固原市| 峨边| 内黄县| 乐安县| 伊春市| 全南县| 营口市| 柳林县| 岳西县| 山西省| 灵石县| 苍南县| 伊金霍洛旗| 静宁县| 福鼎市| 彩票| 松阳县| 平乐县| 伊通| 虎林市| 兴国县| 东宁县| 翁牛特旗| 蒙城县| 吴江市| 宣化县| 崇信县| 互助| 滦南县| 城步| 灌阳县| 大宁县| 呼图壁县| 上思县| 凌源市| 巩留县| 井冈山市| 武强县| 虞城县| 富蕴县|