Homo forgesas

Mi skribis jenan C-funkcion:

int char2long(unsigned char *aro, long nombro)
{
   nombro = aro[3]*0x1000000 + aro[2]*0x10000
         + aro[1]*0x100 + aro[0];
   return 1;
}

Mi intencis, ke tabelo de 4 char-elementoj transformiĝu en longan entjeron. Sed ĝi ne funkciis tiel, kiel mi intencis.
Mi ja forgesis plej bazan regulon de C-funkcio. Ke funkcio estas vokata kun valoro de parametro (ne kun referenco al parametro). La funkcio ne redonas al vokanta proceduro modifitan valoron de la variablo “nombro”.
Mi devis skribi jene:

long char2long(unsigned char *aro)
{
   return aro[3]*0x1000000 + aro[2]*0x10000
         + aro[1]*0x100 + aro[0];
}

Unu penso pri “Homo forgesas”

  1. Vi povus skribi kiel vi skribis komence kondicxe, ke vi skribus adreson de via variablo kaj ne gxin mem. Tiel

    int char2long(unsigned char *aro, long *nombro)
    {
    *nombro = aro[3]*0×1000000 + aro[2]*0×10000
    + aro[1]*0×100 + aro[0];
    return 1;
    }

    Tiel por vokus vian funkcion en via programo vi devus fari tion.

    long variablo;
    char2long(viaAro, &variablo);

    Tiel gxi funkciis.

Respondi

Retpoŝtadreso ne estos publikigita. Devigaj kampoj estas markitaj *