내가이 구조를 초기화 할 :C에서 공용체에서 포인터를 사용하는 방법은 무엇입니까?
typedef struct
{
int num;
union
{
const char** ppStrList;
const char* pStr;
};
union
{
int num1;
int num2;
};
} tMyStruct;
나는 내가 오류가 발생하는 변수를 선언 할 때이 구조를 초기화하려고하면 예를 들어;
const char *gpStr = "str";
const char *gpStrList[2] =
{
{"str1"},
{"str2"}
};
tMyStruct myStruct[2] =
{
{0,{gpStrList},{3}},
{1,{gpStr},{4}}
};
변수 gpStr
구조
을 초기화 할 수 할수 없어 그러나이 문제없이 함수의 내부 초기화 할 수 있습니다 :
int main(int argc, char *argv[])
{
myStruct[0].num = 0;
myStruct[0].ppStrList = gpStrList;
myStruct[0].num1 = 3;
myStruct[1].num = 0;
myStruct[1].pStr = gpStr;
myStruct[1].num2 = 3;
}
구조를 초기화 할 수없는 이유 그것이 선언되었을 때?
내가 노동 조합을 사용하지 않으면 문제가 존재하지 않기 때문에 노동 조합에 특수한 행동이 있다고 생각합니다. 예를 들면 :
typedef struct
{
int num;
union /* Union to contain ppStrList and pStr pointers */
{
const char** ppStrList;
const char* pStr;
};
union
{
int num1;
int num2;
};
} tMyStruct1;
typedef struct
{
int num;
/* I don´t use an union */
const char** ppStrList;
const char* pStr;
union
{
int num1;
int num2;
};
} tMyStruct2;
const char gStr[] = "str";
const char *gpStrList[2] =
{
{"str1"},
{"str2"}
};
tMyStruct1 myStruct1[2] = /* Structure with union inside */
{
{0,{gpStrList},{3}},
{1,{gStr},{4}} /* <--- Error here if I use gStr address with union */
};
tMyStruct2 myStruct2[2] = /* Structure without union inside */
{
{0,gpStrList,NULL,{3}},
{1,NULL,gStr,{4}} /* <--- No poblem here if I use gStr address */
};
나는이 아마 ... 일 것 int num2; }, ' 은 노동 조합을 전혀 사용하지 않아야 함을 증명합니다. – Dariusz