web-dev-qa-db-fra.com

Possible d'initialiser un tableau après la déclaration en C?

Existe-t-il un moyen de déclarer une telle variable avant de l’initialiser?

    CGFloat components[8] = {
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.15
    };

Je voudrais qu'il soit déclaré quelque chose comme ceci (sauf que cela ne fonctionne pas):

    CGFloat components[8];
    components[8] = {
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.15
    };
22
RyJ

Vous ne pouvez pas affecter de tableaux, vous ne pouvez donc pas faire ce que vous proposez, mais vous pouvez le faire en C99:

CGFloat *components;
components = (CGFloat [8]) {
    0.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.15
};

l'opérateur ( ){ } est appelé l'opérateur composé littéral . C'est une fonctionnalité C99.

Notez que dans cet exemple, components est déclaré en tant que pointeur et non en tant que tableau.

29
ouah

Si vous enroulez votre tableau dans une structure, il devient assignable.

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;

Si vous utilisez cette approche, vous pouvez également renvoyer des structures Components à partir de méthodes, ce qui signifie que vous pouvez créer des fonctions pour initialiser et affecter à la structure, par exemple:

Components comps = SomeFunction(inputData);

DoSomethingWithComponents(comps);

comps = GetSomeOtherComps(moreInput);

// etc.
7
dreamlax

Cette notation pour les tableaux et les structures n'est valide que dans les initialisations, donc non.

0
asaelr