programing

C에서 선언 후 배열을 초기화할 수 있습니까?

mailnote 2023. 10. 23. 22:01
반응형

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;

이 방법을 사용하면 반환할 수도 있습니다.Componentsmethods 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

반응형