首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言結構體成員函數指標解析:`uint64_t (*next)(struct GenInfo * const)` 並非下一節點指標

     編輯:程式設計綜合問答

原始宣告


struct GenInfo {
    uint64_t (*next)(struct GenInfo * const);  // 第一行
    enum GeneratorType type;
    union { ... } gen;
};

正確解讀

uint64_t (*next)(struct GenInfo * const) 是函數指標,而非結構體指標。
詳細拆解:

  • uint64_t:回傳型別(無號 64 位整數)。
  • (*next):next 是指標變數名。
  • (struct GenInfo * const):參數列表,單一參數,型別為「指向 const GenInfo 的指標」(指標本身 const,指向內容可修改)。

等價 typedef uint64_t (*NextFunc)(struct GenInfo * const); NextFunc next;。

用途

實現多型/策略模式:不同產生器類型(Constant, Counter, Zipfian...)各自實作 next 函數,GenInfo 透過函數指標統一呼叫,無需 switch(type)。

呼叫範例


uint64_t constant_next(struct GenInfo* const g) { return g->gen.constant.value; }
uint64_t counter_next(struct GenInfo* const g) { return g->gen.counter.current++; }

// 初始化
struct GenInfo gi;
gi.type = GEN_CONSTANT;
gi.next = constant_next;
gi.gen.constant.value = 42;

// 使用
uint64_t val = gi.next(&gi);  // 呼叫對應策略

對比:真正的下一節點指標


struct GenInfo* next;  // 單純指標,非函數指標

原答案核心

「是一個函數指針。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved