한 라인에 구조체의 배열의 모든 값을 변경C 나는 구조 선언 할 수
test_t theTest[2] =
{
{1,2,3},
{4,5,6}
};
을하지만, 배열을 만든 후에 루프없이 모든 값을 명시 적으로 지정하여 한 줄만 사용하여 위에서 설명한 것과 같은 방식으로 값을 변경할 수 있습니까?
한 라인에 구조체의 배열의 모든 값을 변경C 나는 구조 선언 할 수
test_t theTest[2] =
{
{1,2,3},
{4,5,6}
};
을하지만, 배열을 만든 후에 루프없이 모든 값을 명시 적으로 지정하여 한 줄만 사용하여 위에서 설명한 것과 같은 방식으로 값을 변경할 수 있습니까?
는 C99에서 당신은 한 줄의 각 구조를 할당 할 수 있습니다. 당신이 한 줄에 구조체의 배열을 할당 할 수 있다고 생각하지 않습니다.
C99에서는 복합 리터럴을 사용합니다. The New C: Compound Literals
theTest[0] = (test_t){7,8,9};
theTest[1] = (test_t){10,11,12};
당신은이 같은 포인터에 할당 할 수 있습니다 :
이test_t* p;
p = (test_t [2]){ {7,8,9}, {10,11,12} };
당신은뿐만 아니라 방어 적이기을 사용할 수
memcpy(theTest, (test_t [2]){ {7,8,9}, {10,11,12} }, sizeof(test_t [2]);
테스트보다도 여기 박사 돕 스는 문서를 참조하십시오 gcc -std = c99 (버전 4.2.4) (Linux)
복합 리터럴이 작동하는 방식을 이해하려면 Dr. Dobbs 문서를 읽어야합니다.
나는이 방법으로 초기화 배열 만 할 수 있다고 생각하지 않습니다. '단선'방법을 사용하여 구조 값을 변경할 수 있습니다.
'값을 변경할 수 없음'을 의미 했습니까? C99을 언급하는 대답도 참조하십시오. –
죄송합니다. 저는 -c99 만 사용하고 그 사실을 언급하지 않았습니다. 나는 종종이 기능을 사용한다 : "theTest [0] = (test_t) {7,8,9};" – f0b0s
변수가 다른 소스에서 복사되는 경우 memcpy와 같은 메서드를 사용하여 구조체 값을 직접 덮어 쓸 수 있습니다.
그러나 언어는 개별 요소를 설정하는 것 외에 값을 설정하는 직접적인 방법을 제공하지 않습니다. 경우
C99에 대해 잊어 버렸습니다. –
당신은 제로 (-1), 사용할 수 memset
에 값을 설정하려면 :
memset(struct_array, 0, sizeof(struct_array));
memset(struct_array, -1, sizeof(struct_array));
사실이지만 아주 완전하지는 않습니다. 당신은 C99에 대해 잊어 버렸습니다. –
방금 문제의 일반적인 경우에 대한 대체 방법으로이 문제를 언급했습니다. 나는 그것이 완전한 문제를 해결한다고 주장하지 않았다. –
나는 이것들을 조합하여 작동하는지 확인해 볼 것입니다. –
그걸로, 당신은 할당 루프에 대한 매크로를 만들 수 있습니다. 그렇게하면 재사용이 쉽고 청소가 쉽습니다. – Loki
+1은 C89가 할 수 있음에도 불구하고 C99이 할 수 있음을 알고 있기 때문에 +1합니다. –