欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中的結(jié)構(gòu)體內(nèi)嵌函數(shù)用法

 更新時(shí)間:2023年02月24日 10:29:50   作者:大熊c  
這篇文章主要介紹了C語言中的結(jié)構(gòu)體內(nèi)嵌函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C語言的結(jié)構(gòu)體內(nèi)嵌函數(shù)

看門見山

1.內(nèi)嵌函數(shù)定義舉例:經(jīng)過真實(shí)測(cè)試

在函數(shù)中聲明定義結(jié)構(gòu)體

#include "fun_in_struct.h"
?
int main(int argc, char **argv) {
? ? //定義結(jié)構(gòu)體指針或者結(jié)構(gòu)體變量,分別用->和.進(jìn)行內(nèi)部元素的使用
? ? data_store_object *obj;
? ? char ? ? ? ? ? ? ?*word;
?
? ? /*方法一:直接定義結(jié)構(gòu)體指針然后用->對(duì)結(jié)構(gòu)體變量和函數(shù)進(jìn)行初始化
? ? 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;
? ? */
? ? ?/*方法二:直接定義結(jié)構(gòu)體變量然后直接進(jìn)行初始化,用 ? ?變量 = xxx;進(jìn)行賦值
? ? 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;
? ? */
? ? /*方法三:直接定義結(jié)構(gòu)體變量,然后使用 ? ?變量 : xx進(jìn)行賦值
? ? 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;
? ? */

在頭文件中對(duì)結(jié)構(gòu)體進(jìn)行定義:  

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

進(jìn)行兩個(gè)函數(shù)的聲明,函數(shù)的定義發(fā)生在其他的源文件

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

2.內(nèi)嵌函數(shù)的個(gè)人理解

C語言的結(jié)構(gòu)體內(nèi)部是可以定義函數(shù)的,就像java中定義方法一樣,我們?cè)跇?gòu)建對(duì)象的時(shí)候不止是可以使用它的參數(shù),還可以使用它內(nèi)部關(guān)于數(shù)據(jù)的處理函數(shù),java中叫做方法;但是C語言并不能實(shí)現(xiàn)類中方法的繼承,重載,重寫等特性,因此用的不是很多;

C語言是可以面向?qū)ο蟮?,面向?qū)ο笫且环N思想,將事物和做事的過程定義成對(duì)象,只是C語言的語法讓面向?qū)ο笞兊貌荒敲春糜谩?/p>

C語言是要轉(zhuǎn)化為匯編語言再轉(zhuǎn)化為機(jī)器語言運(yùn)行的,在匯編語言中存在著聲明代碼段的過程,將一段匯編指令之前加上一個(gè)標(biāo)號(hào),而這個(gè)標(biāo)號(hào)就是函數(shù)的名稱,我們所說的函數(shù)名實(shí)際上代表了一段構(gòu)匯編指令的初始內(nèi)存地址。那么變量可以附地址,函數(shù)也是可以的,有興趣的可以看一下匯編語言和C語言混合編程,就理解了內(nèi)嵌函數(shù)中出現(xiàn)的函數(shù)指針。

結(jié)構(gòu)體嵌套函數(shù)指針

這次來記錄一下結(jié)構(gòu)體嵌套函數(shù)指針

這個(gè)知識(shí)點(diǎn)想了2天終于搞懂了。

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

解釋

首先,和平常創(chuàng)建一個(gè)結(jié)構(gòu)體一樣,唯獨(dú)不同的就是里面的變量是一個(gè)函數(shù)指針,關(guān)于函數(shù)指針的內(nèi)容,原理,我這里就不多解釋說明了,去搜一下都有很多。我們就簡(jiǎn)單的理解為:函數(shù)指針=指向函數(shù)地址的指針變量。

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

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

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

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

這段代碼,定義了3結(jié)構(gòu)體數(shù)組,

  • 1.每個(gè)數(shù)組里面都有該結(jié)構(gòu)體的成員
  • 2.每個(gè)數(shù)組里面都有該結(jié)構(gòu)體的成員
  • 3.每個(gè)數(shù)組里面都有該結(jié)構(gòu)體的成員(重要的事情說三遍)!

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

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();

那這里是調(diào)用了哪個(gè)函數(shù)呢?通過代碼可以知道,是調(diào)用了ON_OFF_Pro這個(gè)函數(shù)。所以執(zhí)行調(diào)用這個(gè)結(jié)構(gòu)體成員變量的時(shí)候,會(huì)調(diào)用這個(gè)函數(shù),因?yàn)橐婚_始已經(jīng)把函數(shù)的入口地址分配好了,只需要調(diào)用結(jié)構(gòu)體成員變量就能夠?qū)崿F(xiàn)調(diào)用函數(shù)。

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

下面來看看實(shí)際項(xiàng)目按鍵的用法

總結(jié)

以上所有內(nèi)容均為自己筆記,僅讓自己理解為主導(dǎo)!

這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲

    C語言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)易的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • QT使用QML實(shí)現(xiàn)地圖繪制虛線的示例代碼

    QT使用QML實(shí)現(xiàn)地圖繪制虛線的示例代碼

    QML提供了MapPolyline用于在地圖上繪制線段,這篇文章主要為大家詳細(xì)介紹了QT如何使用QML實(shí)現(xiàn)在地圖上繪制虛線,需要的小伙伴可以參考一下
    2023-07-07
  • C語言實(shí)現(xiàn)變色進(jìn)度條

    C語言實(shí)現(xiàn)變色進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)一個(gè)變色的進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Qt+Quick實(shí)現(xiàn)圖片演示器的開發(fā)

    Qt+Quick實(shí)現(xiàn)圖片演示器的開發(fā)

    這篇文章主要為大家詳細(xì)介紹了Qt如何利用Quick實(shí)現(xiàn)圖片演示器的開發(fā),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下
    2023-01-01
  • C語言實(shí)現(xiàn)酒店管理系統(tǒng)

    C語言實(shí)現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++ COM編程之接口背后的虛函數(shù)表

    C++ COM編程之接口背后的虛函數(shù)表

    這篇文章主要介紹了C++ COM編程之接口背后的虛函數(shù)表,COM的背后,就是接口,而接口的背后,就是虛函數(shù)表,需要的朋友可以參考下
    2014-10-10
  • 一篇文章帶你了解C++中的顯示轉(zhuǎn)換

    一篇文章帶你了解C++中的顯示轉(zhuǎn)換

    這篇文章主要介紹了C++11顯示類型轉(zhuǎn)換的優(yōu)點(diǎn),幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能給你帶來幫助
    2021-08-08
  • C++使用boost::lexical_cast進(jìn)行數(shù)值轉(zhuǎn)換

    C++使用boost::lexical_cast進(jìn)行數(shù)值轉(zhuǎn)換

    這篇文章介紹了C++使用boost::lexical_cast進(jìn)行數(shù)值轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Qt自定義控件實(shí)現(xiàn)線條型加載條

    Qt自定義控件實(shí)現(xiàn)線條型加載條

    這篇文章主要為大家詳細(xì)介紹了Qt自定義控件實(shí)現(xiàn)線條型加載條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Java C++ 算法題解leetcode1608特殊數(shù)組特征值

    Java C++ 算法題解leetcode1608特殊數(shù)組特征值

    這篇文章主要為大家介紹了Java C++ 算法題解拓展leetcode1608特殊數(shù)組特征值實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論