• # Passage

    Posté par . En réponse au message taille d'un tableau avec sizeof. Évalué à 3.

    Dans le main, v "est" en fait un int[10], le int[] = {} est une facilité d'écriture.
    Mais un int[10] n'est pas une l-value, ni passable directement en paramètre.
    Par contre, int v[10] -> int v[] == int *v est possible
    (il suffit de prendre l'adresse du premier élément) et utilisé pour le passage de paramètres.

    L'exemple suivant affiche "size is obviously : 20\nnot so obviously : 4 ".


    namespace nSizeof
    {
    void func1(int faTruc[5])
    {
    // the [5] ne sert à rien
    cout << "not so obviously : " << sizeof(*faTruc) << endl;
    }

    void func5(int (*faTruc)[5])
    {
    cout << "size is obviously : " << sizeof(*faTruc) << endl;
    }

    bool doTest()
    {
    int lDummy = 5;
    int laTab5[] = {1,2,3,4,5};
    func5(&laTab5);
    func1(laTab5);
    //int laTab5_2[5];
    //laTab5_2 = laTab5; // not a l-value
    //laTab5_2 = (int*)laTab5; // no conversion to array types
    //laTab5 = &lDummy; // idem
    return true;
    }
    };

    int main()
    {
    nSizeof::doTest();
    return 0;
    }


    indent :(