我聲明瞭一個名爲「Struct」的新結構體 我有一個通用函數,它接受一個參數「void * data」。將一個結構體傳遞給一個通用函數C
void Foo(void *data)
我通過「結構」的一個實例爲通用功能。
Struct s;
Foo(&s);
我想訪問函數中結構的屬性之一。
void Foo(void *data) {
char *word = (char*) data.word;
}
這是不允許的,因爲它不會將數據識別爲有效的結構。
我甚至嘗試首先聲明數據爲結構類型,並且出現錯誤。
void Foo(void *data) {
Struct s = (Struct) data;
char *word = s.word;
}
我得到「轉化爲要求的非標型」。
如果你需要它是一個Struct,爲什麼要在第一個地方傳遞void *? – 2011-04-17 20:48:26
@Bo:該函數可能是一個回調函數,必須符合外部指定的API,調用者和函數會知道'void * data'應該是什麼,但是它們之間的代碼可能不會。查看'bsearch'和'qsort'作爲標準庫的例子。 – 2011-04-17 21:00:22