關於C語言中的結構體內嵌函數(轉)

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繼承

相關文章
相關標籤/搜索