공용체를 포함한 c 구조체 초기화

Michael Gerbracht

ColourModelBlock다음 값을 사용하여 다음 구조체 를 초기화하고 싶습니다 .

extension_size = 4
model = 0
red = 0
green = 0
blue = 0

typedef struct {
  int                           extension_size;
  ColourModelData               ext;
} ColourModelBlock;

typedef struct {

  unsigned int      model; 
  union {

    struct {
       int               red;                  /* % */
       int               green;                /* % */
       int               blue;                 /* % */
    } rgb;

    struct {
       int               cyan;                 /* % */
       int               magenta;              /* % */
       int               yellow;               /* % */
       int               key;                  /* % */
    } cmyk;

    struct {
      int               hue;                  /* angle (degrees) */
       int               saturation;           /* % */
       int               value;                /* % */
    } hsv;

    char bytes[16];
    int  words[4];
  } data;
} ColourModelData;

이 작업은 간단한데하지만 직접 값을 설정하려고 (근무 extension_sizemodel하지만 노조 값을 설정하는 방법을 알고하지 않았다) 또는 사용하여 memcpy(A)의 int배열입니다.

그러나 나는 C를 처음 접했기 때문에 그것을 엉망으로 만들 수도 있습니다.

에릭 포스트 피쉴

첫째, ColourModelBlock정의에 사용하기 전에 선언해야합니다 ColourModelBlock.

그런 다음 ColourModelBlock. 먼저 구조를 초기화하려면 해당 값을 중괄호로 나열하면됩니다. 공용체가 관련되면 공용체의 첫 번째 멤버가 초기화됩니다.

ColourModelBlock x = { 4, { 0, {{ 0, 0, 0 }} } };

여기서 내측 브레이스의 구조에 따라 ColourModelBlock사용하여 A, {각각 함유 struct또는 union. 컴파일러는 이러한 중괄호없이 코드를 받아들이고 동일한 순서로 초기화하지만 경고 할 수 있으며 오류를 포착하는 데 도움이되므로 중괄호를 사용하는 것이 좋습니다.

둘째, 멤버 이름을 사용하여 각 값으로 초기화중인 멤버를 나타낼 수 있습니다. 이렇게하면 첫 번째 멤버가 아닌 다른 멤버를 통해 공용체를 초기화 할 수도 있지만 여기서는 수행되지 않습니다.

ColourModelBlock x = {
        .extension_size = 4,
        .ext = {
            .model = 0,
            .data.rgb = { 0, 0, 0 }
        }
    };

위의 내용은 실제로 여러 방법의 조합을 사용합니다. 대부분의 멤버는 지정된 이니셜 라이저 라고하는 이름 으로 초기화 됩니다. 그러나 .data.rgb첫 번째 방법에서와 같이 공용체의 이름을 지정한 다음 목록으로 멤버를 초기화합니다. rgb멤버가 트리플로 생각 되는이 경우 당연한 일이다 .

객체를 정의한 다음 할당 문을 사용하여 값을 제공 할 수도 있습니다. 위의 구문은 초기화를위한 것입니다. 할당에는 다른 구문이 필요합니다.

ColourModelBlock x;
x.extension_size = 4;
x.ext.model = 0;
x.ext.data.rgb.red   = 0;
x.ext.data.rgb.green = 0;
x.ext.data.rgb.blue  = 0;

복합 리터럴 을 사용하여 할당에서 초기화 구문을 사용할 수 있습니다 . 복합 리터럴을 만들어 할당에 사용하려면 위의 초기화 목록 중 하나를 사용하고 앞에 괄호 안에 유형 이름을 넣은 다음 할당의 오른쪽으로 사용합니다.

x = (ColourModelBlock) { 4, { 0, {{ 0, 0, 0 }} } };

마지막으로 초기 값으로 사용하려는 대부분의 값이 0이므로 생략 할 수 있습니다. 구조가 초기화되고 있고 모든 멤버에 대해 명시 적 값이 제공되지 않은 경우 명시 적 값이없는 멤버는 0 (또는 포인터의 경우 널 포인터로)으로 초기화됩니다.

ColourModelBlock t = { 4 };

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

공용체를 사용한 구조체 초기화 반환

분류에서Dev

C ++에서 구조체에 대한 포인터 초기화

분류에서Dev

구조체 포인터와 지정된 초기화를 사용하여 C 구조체를 초기화하는 방법

분류에서Dev

함수 포인터가있는 구조체 배열 초기화 C

분류에서Dev

C ++ : 구조체 초기화의 적절한 방법

분류에서Dev

C 구조체, 구조체에 대한 공용체 포인터

분류에서Dev

C ++ const 구조체 초기화

분류에서Dev

C의 구조체 초기화

분류에서Dev

구조체 포인터 초기화

분류에서Dev

C : 구조체로 포인터를 초기화 할 때 분할 오류

분류에서Dev

C ++ 포인터에서 배열의 대상 구조체를 포함하여 구조체에 대한 값 읽기

분류에서Dev

함수 호출을 통해 구조체 구조체 초기화

분류에서Dev

구조체의 포인터에 대한 포인터 초기화

분류에서Dev

배열을 포함하는 구조체 초기화

분류에서Dev

함수 포인터로 구조체 초기화

분류에서Dev

C : 구조체 초기화 및 함수 매개 변수의 포인터에 할당

분류에서Dev

초기화없이 구조체 멤버에 대한 포인터

분류에서Dev

구조체에 대한 포인터 배열 초기화

분류에서Dev

c 배열과 구조체를 동시에 초기화

분류에서Dev

C에서 함수 포인터를 포함하는 구조체를 만들고 초기화하는 올바른 방법은 무엇입니까?

분류에서Dev

구조체 하드 코딩 된 초기화 내의 C 구조체

분류에서Dev

fstream C ++를 사용하여 초기화 된 구조체 멤버 편집

분류에서Dev

매크로를 사용할 때 구조체 초기화 문제의 C 배열

분류에서Dev

초기 typedef 구조체 포인터 (C / C ++)

분류에서Dev

C ++의 배열에서 구조체를 초기화하는 확장 가능한 방법이 있습니까?

분류에서Dev

C ++ : 멤버 구조체의 정적 필드를 초기화하는 적절한 방법

분류에서Dev

C ++에서 C 방식으로 구조체 초기화

분류에서Dev

C 및 C ++에서 구조체 배열 초기화

분류에서Dev

float C 배열에 대한 공용체 유형 (구조체도 포함)의 포인터

Related 관련 기사

  1. 1

    공용체를 사용한 구조체 초기화 반환

  2. 2

    C ++에서 구조체에 대한 포인터 초기화

  3. 3

    구조체 포인터와 지정된 초기화를 사용하여 C 구조체를 초기화하는 방법

  4. 4

    함수 포인터가있는 구조체 배열 초기화 C

  5. 5

    C ++ : 구조체 초기화의 적절한 방법

  6. 6

    C 구조체, 구조체에 대한 공용체 포인터

  7. 7

    C ++ const 구조체 초기화

  8. 8

    C의 구조체 초기화

  9. 9

    구조체 포인터 초기화

  10. 10

    C : 구조체로 포인터를 초기화 할 때 분할 오류

  11. 11

    C ++ 포인터에서 배열의 대상 구조체를 포함하여 구조체에 대한 값 읽기

  12. 12

    함수 호출을 통해 구조체 구조체 초기화

  13. 13

    구조체의 포인터에 대한 포인터 초기화

  14. 14

    배열을 포함하는 구조체 초기화

  15. 15

    함수 포인터로 구조체 초기화

  16. 16

    C : 구조체 초기화 및 함수 매개 변수의 포인터에 할당

  17. 17

    초기화없이 구조체 멤버에 대한 포인터

  18. 18

    구조체에 대한 포인터 배열 초기화

  19. 19

    c 배열과 구조체를 동시에 초기화

  20. 20

    C에서 함수 포인터를 포함하는 구조체를 만들고 초기화하는 올바른 방법은 무엇입니까?

  21. 21

    구조체 하드 코딩 된 초기화 내의 C 구조체

  22. 22

    fstream C ++를 사용하여 초기화 된 구조체 멤버 편집

  23. 23

    매크로를 사용할 때 구조체 초기화 문제의 C 배열

  24. 24

    초기 typedef 구조체 포인터 (C / C ++)

  25. 25

    C ++의 배열에서 구조체를 초기화하는 확장 가능한 방법이 있습니까?

  26. 26

    C ++ : 멤버 구조체의 정적 필드를 초기화하는 적절한 방법

  27. 27

    C ++에서 C 방식으로 구조체 초기화

  28. 28

    C 및 C ++에서 구조체 배열 초기화

  29. 29

    float C 배열에 대한 공용체 유형 (구조체도 포함)의 포인터

뜨겁다태그

보관