您好,登錄后才能下訂單哦!
今天小編給大家分享一下C語言中的結構體內嵌函數如何使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
看門見山
在函數中聲明定義結構體
#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);
C語言的結構體內部是可以定義函數的,就像java中定義方法一樣,我們在構建對象的時候不止是可以使用它的參數,還可以使用它內部關于數據的處理函數,java中叫做方法;但是C語言并不能實現類中方法的繼承,重載,重寫等特性,因此用的不是很多;
C語言是可以面向對象的,面向對象是一種思想,將事物和做事的過程定義成對象,只是C語言的語法讓面向對象變得不那么好用。
C語言是要轉化為匯編語言再轉化為機器語言運行的,在匯編語言中存在著聲明代碼段的過程,將一段匯編指令之前加上一個標號,而這個標號就是函數的名稱,我們所說的函數名實際上代表了一段構匯編指令的初始內存地址。那么變量可以附地址,函數也是可以的,有興趣的可以看一下匯編語言和C語言混合編程,就理解了內嵌函數中出現的函數指針。
這次來記錄一下結構體嵌套函數指針
這個知識點想了2天終于搞懂了。
先看代碼,試著理解一下,不理解再看我后面的解釋。
首先,和平常創建一個結構體一樣,唯獨不同的就是里面的變量是一個函數指針,關于函數指針的內容,原理,我這里就不多解釋說明了,去搜一下都有很多。我們就簡單的理解為:函數指針=指向函數地址的指針變量。
所以這里的 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語言中的結構體內嵌函數如何使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。