구조체의 요소를 어떻게 초기화 할 수 있습니까?구조체 C에서 변수 행렬 초기화하기
typedef struct { int mat[x][x]; int res; } graphe;
graphe g;
내가이 작업을 기다리고 있었다 : :이 구조체가
g.mat = {{0, 1}, {1, 0}, {1, 1}, {0, 1}};
을하지만 그렇지 않습니다.
구조체의 요소를 어떻게 초기화 할 수 있습니까?구조체 C에서 변수 행렬 초기화하기
typedef struct { int mat[x][x]; int res; } graphe;
graphe g;
내가이 작업을 기다리고 있었다 : :이 구조체가
g.mat = {{0, 1}, {1, 0}, {1, 1}, {0, 1}};
을하지만 그렇지 않습니다.
주된 문제점은 배열을 할당 할 수 없으며 g.mat
을 설정할 때까지 이미 초기화 된 것입니다. 시도중인 것은 으로 기존 인스턴스의 구성원에 값을 지정하는 것입니다. 덜 문제는 누락 된 중괄호입니다.
대신
기본-초기화g
을 한 다음
회원에 대해 원하는 값으로에게
graphe
객체를 초기화 할 수 있습니다, 회원들에게 값을 할당
를 시도 : graphe g = {{{0, 1}, {1, 0}, {1, 1}, {0, 1}}};
이 또한 암시 적으로 초기화합니다 g.res
~ 0
이지만 특정 값으로 초기화 할 수도 있습니다.
graphe g = {{{0, 1}, {1, 0}, {1, 1}, {0, 1}}, 42};
다음은 designated initializers을 사용한 예입니다. 이것은 앞의 예보다 쉽게 읽을 수 있습니다, 당신은 필드의 순서를 변경할 수 있습니다 : @의 juanchopanza의 대답에서와 같이, 정의의 시점에서
graphe g = { .mat = {{0, 1}, {1, 0}, {1, 1}, {0, 1}}, .res = 42};
감사합니다. 감사합니다. –
당신은 초기화 할 수 있습니다 당신의 g
을.
그러나, 당신은 또한 는 C 언어
g = (graphe) { { { 0, 1 }, { 1, 0 }, { 1, 1 }, { 0, 1 } }, 42 };
주의 화합물 문자 기능과 함께 유사한 구문을 사용하여 (필요할 경우) 나중에 g
에에 새 값을 할당 할 수 할당 연산자는 전체 struct 객체에 대해서만 작동합니다. g.mat
배열에만 새 값을 할당하고 g
의 다른 필드는 건드리지 않으려면 C의 배열을 할당 할 수 없으므로 할당 연산자가 해당 용도로 작동하지 않습니다. 그러나 여전히이 당신이 당신의 질문을하려고 노력 무엇을 실제로 g.mat
memcpy(g.mat, (int [x][x]) { { 0, 1 }, { 1, 0 }, { 1, 1 }, { 0, 1 } }, sizeof g.mat);
에 새로운 값을 복사하는 화합물 문자와 함께 memcpy
을 사용할 수 있습니다.
"작동하지 않는 것"에 대해 자세히 설명해야합니다. – 0x499602D2
'g.mat = {{{{0}}, {1, 0}, {1, 1}, {0, 1}}}; 즉, 배열을 초기화하는 다른 중괄호 집합입니다. – 0x499602D2
할당 및 초기화는 C의 다른 개념입니다. 초기화하지는 않지만 할당하는 것입니다. –