下面的代碼生成錯誤:初始化元素不是常量 在編譯時聲明和初始化用戶結構變量的行。如何將sizeof運算符應用於函數指針並初始化結構?
#include <stdio.h>
#include <stdlib.h>
struct user_s {
char *name;
void (*(*pred_skip_func))(int);
};
void f1 (int skip) {
printf("I am f1\n");
}
void f2 (int skip) {
printf("I am f2\n");
}
void (*(*pred_skip_func))(int);
struct user_s user = {"Manu", pred_skip_func};
int main(void) {
struct user_s tmp;
pred_skip_func = malloc(sizeof(tmp.pred_skip_func) * 2);
pred_skip_func[0] = f1;
pred_skip_func[1] = f2;
int i;
for (i = 0; i < 2; i++) {
(*(user.pred_skip_func)[i]) (i);
}
return EXIT_SUCCESS;
}
在主函數中移動初始化解決了這個問題,但我想明白爲什麼?結構初始化有沒有限制?
更重要的是,您可以看到,我創建了一個tmp user_struc變量來獲取函數指針的指針大小,因爲我無法以更清晰的方式執行此操作。我怎樣才能解決這個問題 ?
在這個例子中,struct用戶有靜態存儲?對我來說不是。所以我不清楚。 – 2012-08-03 11:40:18
@ManuelSelva:在文件範圍聲明的變量具有*靜態存儲持續時間*。 – Jon 2012-08-03 11:41:02
好的。因此,將全局變量聲明爲靜態不會影響「存儲時間」,但我們怎麼稱呼它? – 2012-08-03 11:42:31