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_size
및 model
하지만 노조 값을 설정하는 방법을 알고하지 않았다) 또는 사용하여 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] 삭제
몇 마디 만하겠습니다