#include <stdio.h>
typedef struct {
int a;
int b;
int c;
} FIRST_T;
typedef struct {
int x;
int y;
int z;
FIRST_T *p;
} SECOND_T;
typedef struct {
int a1;
int a2;
int a3;
FIRST_T *q;
}THIRD_T;
const FIRST_T p1[]={{1,2,3},{3,4,5},{6,7,8}};
const FIRST_T p2[]={{4,5,12},{7,8,9}};
const SECOND_T my_second[]=
{
{1,2,3,p1},
{4,5,6,p2}
};
const THIRD_T my_third[] = {{1,2,3,my_second[1].p},{4,5,6,my_second[0].p}};
int main() {
//const THIRD_T my_third[] = {{1,2,3,my_second[1].p},{4,5,6,my_second[0].p}};
printf("%d %d %d %d \n",
my_third[0].a1,
my_third[0].a2,
my_third[0].a3,
my_third[0].q[1].c);
}
我知道,如果我在函數範圍內初始化my_third它工作正常,如「在C,具有靜態存儲持續時間對象,如在文件範圍內聲明的對象只能用常量表達式初始化「否則它給了我:錯誤:初始元素不是常數
錯誤:初始元素不是常數 new.c:41:錯誤:(近初始化`my_third [0] .Q」)
現在我的問題是:是否有任何解決方法我沒有移動功能內的表達式。我無法移動,因爲這些結構在我的代碼中的很多地方都使用過。
如果您需要更多信息,請讓我知道。
你真的需要修復縮進和張貼代碼本網站前添加類型定義之間有一些空行。 – Lundin 2012-03-27 06:45:06