Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

puntatori ed array

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: puntatori ed array

Messaggioda Foto UtenteDirtyDeeds » 3 ott 2013, 19:33

TardoFreak ha scritto:Formalmente si, ma se lo implementi su un micro non è una bellissima soluzione perché ritorni un' array, quindi un bel po' di bytes.


Sì, infatti. Non è una bellissima soluzione in generale, però può essere utile talvolta per piccoli array.

Per ciò che riguarda invece i computer, bisogna ormai un po' abbandonare l'idea che il passaggio dei parametri avvenga solo attraverso lo stack, come era uso fino a un po' di anni fa. I processori di oggi hanno molti registri e i parametri vengono passati anche attraverso di essi. Qui c'è un bell'articolo che descrive come avviene il passaggio dei parametri nelle architetture x86.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[12] Re: puntatori ed array

Messaggioda Foto UtenteMarcRider » 3 ott 2013, 19:57

Pensando un po alla portabilità del codice, e considerando il fatto che la libreria che sto facendo, potrei non usarla solo io, sia la soluzione della struct che ingloba l'array, che l'array globale potrebbe essere macchinosa sotto certi punti di vista (ditemi se dico na ca...ta).

A questo punto la soluzione poco elegante del'array static, creato in questo caso solo se si usa la funzione, direi che è decisamente invitante. La mia paura più grande era che se ogni volta che uso la funzione, tipo 10 volte, mi allocava 10 array in memoria... e ovviamente se si facesse uso continuo della funzione, la possibilità di un overflow mi spaventava.

Senza contare che con questo metodo posso creare l'array delle dimensioni esatte che mi occorrono. Cioè se il numero è < 100 ma > 10, allora crea un array di 3 elementi, la decina, l'unità e il \0.

Così facendo, penso, come sottolineava TardoFreak, l'accesso alla risorsa è immediato, però non so se è possibile senza problemi passare come argomento un array. leggevo che anche se ci sono array dello stesso tipo fare Array1 = Array2 non è possibile. Aimè, mia ignoranza, non so se quando si passa un argomento esegue le stesse associazioni di "=". Posso però, essendo static passare ugualmente l'indirizzo della variabile e accedervi? quindi passare come argomento l'inidirizzo e recuperarlo?

Sto scrivendo come se ragionassi ad alta voce.

Altra domanda, se per esempio avessi un array di 4 dimensioni, ma scrivo solo in 3 elementi, quando vado a stampare i caratteri, l'elemento vuoto viene ugualmente stampato, magari come 0x00 ? perché se così fosse allora è ancora più importante avere un array di esatte dimensioni.

questa è la funzione che mi stampa i caratteri su LCD.

Codice: Seleziona tutto
void CaricaStringa(char Str[],char modalita)
    {

        int i;
        for(i = 0; i < strlen(Str); i++)
        {
            Caricamento(modalita,Dato,Str[i]);
            ClrWdt();
        }

    }


Ovviamente se passo un puntatore dovrò modificarla.
Avatar utente
Foto UtenteMarcRider
5 1 4
New entry
New entry
 
Messaggi: 53
Iscritto il: 16 feb 2012, 17:37

0
voti

[13] Re: puntatori ed array

Messaggioda Foto UtenteDirtyDeeds » 3 ott 2013, 20:24

MarcRider ha scritto:che l'array globale potrebbe essere macchinosa sotto certi punti di vista


Non la vedo così macchinosa. E l'array non deve neanche essere globale, può essere locale nel main.

MarcRider ha scritto:La mia paura più grande era che se ogni volta che uso la funzione, tipo 10 volte, mi allocava 10 array in memoria...


No, l'array è sempre lo stesso.

MarcRider ha scritto:Senza contare che con questo metodo posso creare l'array delle dimensioni esatte che mi occorrono.


Un array static non può avere lunghezza variabile.

MarcRider ha scritto:però non so se è possibile senza problemi passare come argomento un array.


Quando passi un array a una funzione, viene passato un puntatore al primo elemento dell'array.

MarcRider ha scritto:Aimè, mia ignoranza, non so se quando si passa un argomento esegue le stesse associazioni di "=".


La semantica del passaggio di un argomento è quasi quella dell'inizializzazione, non quella dell'assegnazione.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[14] Re: puntatori ed array

Messaggioda Foto UtenteMarcRider » 3 ott 2013, 23:52

Ecco qui. Penso che sia facilmente leggibile :ok:

Codice: Seleziona tutto

char Contenitore[4];

char* NumToCharArray (unsigned char Number)
 
    {
     char *Pointer;
     Pointer = &Contenitore[0];
     Pointer[3] = '\0';

     if (Number > 100)
     {
     Pointer[2] = (Number % 10) + '0';         // unità
     Pointer[1] = (Number / 10) % 10 + '0';    // decine
     Pointer[0] = (Number/100) + '0';          // centinaia
     } else if (Number > 10)
     {
     Pointer[2] = (Number % 10) + '0';         // unità
     Pointer[1] = (Number / 10) + '0';         // decine
     Pointer[0] = ' ';
     } else if (Number < 10)
     {
     Pointer[2] = (Number + '0');              // unità
     Pointer[1] = ' ';                        // decine
     Pointer[0] = ' ';
     } else {
     Pointer[2] = 'E';                         // Errore 01 in funzione conversione
     Pointer[1] = '0';                         // da numero a caratteri stampabili
     Pointer[0] = '1';                         // su LCD
     }

         return Pointer;

    }
Avatar utente
Foto UtenteMarcRider
5 1 4
New entry
New entry
 
Messaggi: 53
Iscritto il: 16 feb 2012, 17:37

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti