Individuare errori nel codice.

di il
40 risposte

Individuare errori nel codice.

Sto risolvendo il seguente esercizio in allegato, domani posterò la mia soluzione, ma mi viene un dubbio su alcune sintassi che anche il prof. ci ha spiegato a lezione.

Mi riferisco all'asterisco o alla parentesi quadre, quando si parla di puntatori ecc.

O meglio, gli operatori di deferenziamento sono asterisco * oppure parentesi quadre [ ].

Come sintassi si ha:

*< indirizzo >
< indirizzo > [ offset ]

Come esempio si può dichiarare la seguente uguaglianza:

*( p + 4 ) = p [ 4 ]

Sono così rappresentati gli operatori di deferenziamento.

Ma voi che siete più esperti di me, mi confermate che queste sintassi asterisco * oppure parentesi quadre [ ] sono uno standard usato a livello mondiale?
Un po come dire che è uno standard ISO ?
Allegati:
31893_e42bf9aaa1835658520fffc0360cc5a5.jpg
31893_e42bf9aaa1835658520fffc0360cc5a5.jpg

40 Risposte

  • Re: Individuare errori nel codice.

    Hai studiato cosa è un array? Hai studiato cosa è un puntatore? Sai dare la definizione?
    Per la tua domanda: solitamente si usano le [] che sono più intuitive, ma ci sono dei casi di codice che vedrai (o forse no) nei quali è comodo usare *. Ma non è importante. L'obiettivo dell'esercizio è quello di controllare di non sforare la dimensione di un array statico (dichiarato localmente) o di un array dinamico (dichiarato con la malloc), altrimenti il programma fa pasticci o si blocca prematuramente
  • Re: Individuare errori nel codice.

    A livello mondiale? Ma che vuol dire??

    Un linguaggio di programmazione ha regole sintattiche che non dipendono dalla località in cui le usi. La sintassi con [ ] e * viene usata da chiunque utilizzi il C.
  • Re: Individuare errori nel codice.

    oregon ha scritto:



    Un linguaggio di programmazione ha regole sintattiche che non dipendono dalla località in cui le usi. La sintassi con [ ] e * viene usata da chiunque utilizzi il C.
    Ok allora, io intendevo dire se e' uno standard e da quello che mi confermi, e' cosi'!

    Ti ringrazio!
  • Re: Individuare errori nel codice.

    Voglio farti capire che gli standard non c'entrano.

    Sono regole sintattiche di base nate con il C sin dalla prima versione del linguaggio.

    Che poi, a che ti serve sapere una cosa del genere... mi sfugge il motivo
  • Re: Individuare errori nel codice.

    oregon ha scritto:


    Voglio farti capire che gli standard non c'entrano.

    Sono regole sintattiche di base nate con il C sin dalla prima versione del linguaggio.

    Che poi, a che ti serve sapere una cosa del genere... mi sfugge il motivo
    Ho il timore che il prof. utilizzi dei simboli o sintassi che siano un suo modo di fare programmi!
    Ma invece sono regole sintattiche di base!
  • Re: Individuare errori nel codice.

    No, il professore non può usare "un suo modo di usare simboli" ... è previsto dal linguaggio o non è previsto.
  • Re: Individuare errori nel codice.

    Difficilmente il prof. userà l'aritmetica dei puntatori laddove non serve, a meno che l'esercizio non sia fatto a posta per vedere se l'hai capita come quello che hai postato. Entrambi gli usi sono legittimi e funzionano su tutti i compilatori.
  • Re: Individuare errori nel codice.

    Allora, cerco di dire quanto di più corretto mi è possibile.

    La parte di codice tratta le zone di memoria, o meglio, si evince dalla malloc che definisce allocazione di memoria (dinamicamente), che resta allocata fino a quando non viene invocata la deallocazione free.

    Allocare memoria significa riservare parte di memoria, un esempio è quindi che quella parte di memoria possa contenere un intero, quindi una quantità di memoria riservata ad un programma.

    Spero che quello che dopo aver studiato io non stia dicendo cavolate.
    Questa è la parte di codice della traccia:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        char *a = "aceilprs";
        int v[12] = {5,2,7,1,2,8,0,2,6,3,4,2};
        char *p;
        int i;
    
        p=malloc(sizeof(char)*12);
    
        for(i=0; i<20;++i)
            p[i] = a + v[i];
    
            for (i = 0; i < 12; i++)
                printf("%c", *(p + i));
    
        return 0;
    }


    Primo errore che mi viene di dire è a colpo d'occhio!

    Quei due cicli for non hanno le graffe, i cicli for hanno la seguente struttura:
    for(...){ 
    istruzioni
    }
    


    Giusto
  • Re: Individuare errori nel codice.

    No, un ciclo for esegue una istruzione, quindi quelli sono leciti. Se deve eseguire più istruzioni, queste sono racchiuse tra graffe.

    Non dire queste cose al prof o ti caccia subito.

    Devi controllare il valore che assume l'indice degli array rispetto al massimo allocato.
  • Re: Individuare errori nel codice.

    oregon ha scritto:


    No, un ciclo for esegue una istruzione, quindi quelli sono leciti. Se deve eseguire più istruzioni, queste sono racchiuse tra graffe.

    Cavolo, in nessuna lezione, il prof. ha mai spiegato questo fatto, ha solo spiegato quello che ho scritto io e cioè che i cicli for hanno quella struttura con graffe!

    Ma anche nei testi che sto studiando ancora non avevo visto quanto mi dici!

    oregon ha scritto:


    Non dire queste cose al prof o ti caccia subito.

    Non lo dirò, adesso sono in fase di studio e penso che dire delle cazzate sia lecito, almeno saprò dove correggermi.

    oregon ha scritto:



    Devi controllare il valore che assume l'indice degli array rispetto al massimo allocato.


    Qui devo lavoraci su!

    Allora, l'array ha 12 elementi e sono dichiarati nelle graffe alle loro posizioni....

    Qual'è il massimo allocato?
  • Re: Individuare errori nel codice.

    12 !
  • Re: Individuare errori nel codice.

    Allora, non sto riuscendo a trovare sul materiale del prof. che ci ha fornito e ne tantomeno dalle lezioni, materiale tale che mi faccia capire questi concetti e sono costretto a cercare in giro nel web.

    Dico quello che riesco "a leggere" in quel codice.
    char *a="aceilprs" ;
    è un puntatore di nome a e che ha valore equivalente al numero delle lettere, cioè quel puntatore di tipo char è come se fosse scritto in questo modo:
    char *a= 8; 
    Giusto
    int v [12] = {5,2,7,1,2,8,0,5,6,3,4,2}


    Array di 12 elementi con opportuni indici.
    char *p;


    dichiarazione del puntatore tipo carattere con nome p.
    int i;

    dichiarazione della variabile i come intera.
  • Re: Individuare errori nel codice.

    Posso chiedervi per favore del materiale da cui studiare per questa modalita' di esercizio?

    Sto impazzendo a cercare e non trovare!

    Se vi mando le slide del prof., mi capirete! C' e' solo da incavolarsi!
    Assurdo!
  • Re: Individuare errori nel codice.

    MT09_full ha scritto:


    Allora, non sto riuscendo a trovare sul materiale del prof. che ci ha fornito e ne tantomeno dalle lezioni, materiale tale che mi faccia capire questi concetti e sono costretto a cercare in giro nel web.
    Forse il materiale c'è ma non riesci ad individuarlo tra tutto quello che hai perché non hai chiaro cosa cercare ...
    char *a= 8; 
    Giusto
    No, assolutamente, non ha senso quello che dici ....
    Array di 12 elementi con opportuni indici.
    Scusa, cosa sono per te gli "indici"?
    Posso chiedervi per favore del materiale da cui studiare per questa modalita' di esercizio?
    Sul libro c'è sicuramente la parte relativa ad array e puntatori
    In giro su Internet ti basta cercare

    C array puntatori
    Se vi mando le slide del prof
    Cioè? Manda ... forse vanno lette in modo diverso da come le leggi tu ...
Devi accedere o registrarti per scrivere nel forum
40 risposte