PDA

Visualizza la versione completa : [C] Dubbio sugli array...


luci89
13-02-2008, 17:33
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'?

oregon
13-02-2008, 18:21
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])

luci89
13-02-2008, 20:16
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?

oregon
13-02-2008, 20:36
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 ...

luci89
13-02-2008, 20:49
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'?

MItaly
13-02-2008, 21:48
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.

luci89
13-02-2008, 22:32
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.

MItaly
13-02-2008, 23:00
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.

Loading