https://blog.csdn.net/qq_39490500/article/details/80457831java
看門見山編程
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; */.net
在頭文件中對結構體進行定義:指針
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.內嵌函數的我的理解blog
C語言的結構體內部是能夠定義函數的,就像java中定義方法同樣,咱們在構建對象的時候不止是能夠使用它的參數,還能夠使用它內部關於數據的處理函數,java中叫作方法;可是C語言並不能實現類中方法的繼承,重載,重寫等特性,所以用的不是不少; C語言是能夠面向對象的,面向對象是一種思想,將事物和作事的過程定義成對象,只是C語言的語法讓面向對象變得不那麼好用。 C語言是要轉化爲彙編語言再轉化爲機器語言運行的,在彙編語言中存在着聲明代碼段的過程,將一段彙編指令以前加上一個標號,而這個標號就是函數的名稱,咱們所說的函數名實際上表明瞭一段構彙編指令的初始內存地址。那麼變量能夠附地址,函數也是能夠的,有興趣的能夠看一下彙編語言和C語言混合編程,就理解了內嵌函數中出現的函數指針。 ———————————————— 版權聲明:本文爲CSDN博主「大熊c」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。 原文連接:https://blog.csdn.net/qq_39490500/article/details/80457831繼承