반응형
C에서 선언 후 배열을 초기화할 수 있습니까?
실제로 초기화하기 전에 이와 같은 변수를 선언하는 방법이 있습니까?
CGFloat components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
다음과 같이 선언했으면 합니다(단, 이것이 작동하지 않습니다).
CGFloat components[8];
components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
어레이에 할당할 수 없으므로 기본적으로 제안한 작업을 수행할 수 없지만 C99에서는 다음 작업을 수행할 수 있습니다.
CGFloat *components;
components = (CGFloat [8]) {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
그( ){ }
연산자를 복합 리터럴 연산자라고 합니다.C99 기능입니다.
이 예제에서는components
배열이 아닌 포인터로 선언됩니다.
배열을 구조체로 래핑하면 할당할 수 있습니다.
typedef struct
{
CGFloat c[8];
} Components;
// declare and initialise in one go:
Components comps = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
// declare and then assign:
Components comps;
comps = (Components){
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
// To access elements:
comps.c[3] = 0.04;
이 방법을 사용하면 반환할 수도 있습니다.Components
methods from methods. 즉, 함수를 생성하여 구조물을 초기화하고 할당할 수 있습니다. 예를 들어:
Components comps = SomeFunction(inputData);
DoSomethingWithComponents(comps);
comps = GetSomeOtherComps(moreInput);
// etc.
배열 및 구조에 대한 표기법은 초기화에서만 유효하므로 아니오.
언급URL : https://stackoverflow.com/questions/8886375/possible-to-initialize-an-array-after-the-declaration-in-c
반응형
'programing' 카테고리의 다른 글
ASP를 사용하는 기본 AJAX 예제.NET MVC? (0) | 2023.10.23 |
---|---|
C# 세션 지우기 (0) | 2023.10.23 |
외국의 키 캐스케이드에 의존하는 것이 나쁜가요? (0) | 2023.10.23 |
XmlSerializer에서 Null 값 유형을 내보내지 않도록 억제 (0) | 2023.10.23 |
계층적 역할 기반 접근 제어 시스템 설계 방법 (0) | 2023.10.23 |