Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84

    [C] Dubbio sugli array...

    Salve, programmo da poco tempo in C e ripassando gli array mi è sorto un grosso dubbio. Per quanto riguarda gli array che contengono stringhe di testo (quindi di tipo char), bisogna tenere conto che l'ultimo elemento dell'array è lo '/0' che indica la fine della stringa. Quindi se abbiamo un array di dimensione 10, avrà effettivamente 10 caratteri al suo interno a partire dall'elemento 0, mentre l'elemento 10 sarà lo '/0' giusto? Se invece prendiamo un array di interi o di float, anche qui c'è lo '/0'? Cioè se abbiamo un array di tipo int con dimensione 10. Gli elementi a partire dal posto zero saranno 11 oppure sempre 10 perchè il decimo posto è lo '/0'?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Solamente le stringhe sono terminate dallo \0 perche' la loro lunghezza e' variabile (non ha senso per i tipi numerici che hanno una occupazione "fissa" di byte).

    Se hai un array che contiene una stringa simile

    char s[10];

    avrai gli elementi da s[0] a s[9] e lo \0 sara' contenuto in s[9] (avrai quindi 9 caratteri per la tua stringa da s[0] a s[8])
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Quindi vediamo se ho capito bene... Se ho un array di tipo int o float di dimensione 10 vuol dire che all'interno ci sono esattamente 10 valori che sono posizionati nei posti dallo 0 al 9. Se invece ho un array di tipo char sempre di dimensione 10 ho sempre 10 caratteri a disposizione che si posizioneranno nei posti dallo 0 al 9 però nel nono posto c'è lo '/0' quindi in realtà sono 9 i caratteri che effettivamente posso memorizzare in questo array perchè il decimo è appunto lo '/0'. Adesso ho capito?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da luci89
    Quindi vediamo se ho capito bene... Se ho un array di tipo int o float di dimensione 10 vuol dire che all'interno ci sono esattamente 10 valori che sono posizionati nei posti dallo 0 al 9. Se invece ho un array di tipo char sempre di dimensione 10 ho sempre 10 caratteri a disposizione che si posizioneranno nei posti dallo 0 al 9 però nel nono posto c'è lo '/0' quindi in realtà sono 9 i caratteri che effettivamente posso memorizzare in questo array perchè il decimo è appunto lo '/0'. Adesso ho capito?
    Tutto giusto tranne ...

    ... si posizioneranno nei posti dallo 0 al 9 però nel decimo posto c'è lo '/0' quindi in realtà sono 9 i caratteri che ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Quindi in un array di tipo char di dimensione 10 è come se ha 11 posti? da 0 a 9 per i caratteri (che quindi sono 10 a tutti gli effetti) più il decimo posto per lo '/0'?

  6. #6
    No, un array di dimensione 10 ha 10 posti, di cui uno (quello dopo l'ultima lettera della stringa) è occupato dal carattere NUL ('\0'). Ricorda che non necessariamente un array di char di tot caratteri è utilizzato completamente: potrebbe esserci un array di 20 char di cui sono utilizzati effettivamente solo 10 posizioni, da 0 a 8 per i caratteri della stringa e la 9 per il terminatore.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Quindi se ho capito bene l'unica differenza tra un array di tipo char e uno di tipo int o float è che quello di tipo int o float ha 10 posti (da 0 a 9) tutti effettivamente occupati dai valori mentre quello di tipo char ha sempre 10 posti (da 0 a 9) ma il 9 è occupato dallo '\0' quindi abbiamo a disposizione 9 valori effettivi (e non 10 come nel caso dell'array di tipo int), cioè da 0 a 8.

  8. #8
    Esatto; gli array di loro sono tutti uguali, anche gli array di char potrebbero essere normalmente utilizzati come gli altri senza terminatori (in fondo il tipo char non è altro che un particolare tipo numerico); il fatto è che gli array di char vengono normalmente usati per contenere stringhe, per delimitare le quali si usa normalmente un carattere '\0' (ma ci sono anche altri metodi), che, di fatto, ti toglie un carattere utilizzabile dall'array.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.