PDA

Visualizza versione completa : Puntatori a carattere


otto_cb
20-08-2004, 14.45.53
Salve a tutti

volevo porvi un quesito riguardo un dubbio che mi è venuto da poco , sperando di trovare un ampio chiarimento . La questione riguarda proprio i puntatori , e cioè , un puntatore a un intero sulla mia macchina occupa 4Byte , un intero sulla mia macchina occupa 4Byte, mentre un carattere sulla mia macchina occupa 1Byte e un puntatore a un carattere sulla stessa macchina occupa 4Byte : Perche , non dovrebbe occupare lo stesso 1Byte invece di 4?


Se dichiaro un puntatore a un intero e alloco dinamicamente della memoria per lui con malloc:

code : int * Matrix = (int*)malloc(20 *sizeof(int));

quando vedo la sua dimensione totale con sizeof , il risultato è di 4Byte perchè appunto vedo il suo primo elemento Matrix[1].


Se invece dichiaro un puntatore a un carattere con lo stesso sistema:

Code : char * Matrix = (char *)malloc(20 *sizeof(char));

quando vedo la sua dimensione come nel precedente esempio ottengo sempre 4Byte quando credo che ne dovrei vedere 1 , visto che un carattere occupa un Byte .

Quindi questo è qanto, c'è qualcuno che puo darmi qualche spiegazione in merito .


Grazie


:D :D :D :D :D :D

P8257 WebMaster
20-08-2004, 15.09.04
Il tuo dubbio amletico si risolve con una semplice affermazione .. e cioè che per la macchina non esistono differenze tra i tipi di dati carattere e intero ... vengono gestiti entrambi come numerici, il tipo dati "carattere" è solo una convenzione...

Mi spiego meglio:
Noi abbiamo i seguenti tipi nativi:

- char
- int
- long
- double

L'unico tipo dati "reale" è il "double", gli altri tipi vengono ottenuti eseguendo un casting del tipo dati più grande gestibile dall'architettura della macchina, il casting si ottiene troncando il materiale in eccesso, ad esempio, l'int è il casting di un double portato a 32 bit e così via.

Nell'ordine sopra ho ordinato i tipi dati dal più piccolo al più grande e non a caso ho messo il 'char' in testa.. il char infatti equivale ad uno "short int", cioè ad un 'int' a cui viene applicato il modificatore 'short' che lo restringe a 8-bit...

Il risultato è che per noi programmatori esiste la parolina chiave 'char' ma essa viene risolta dal compilatore in 'short int' il che vuol dire che un puntatore a char è equivalente ad un puntatore ad int, ed occupa perciò lo stesso quantitativo di memoria.

Bye :cool:

LoryOne
20-08-2004, 18.11.47
Io ti pongo un'altra domanda:
Se con un puntatore punti alla locazione in memoria di un dato, quanto riusciresti ad indirizzare con un solo byte ?

P8257 WebMaster
20-08-2004, 18.27.12
Forse si confonde tra "puntatore" e "oggetto puntato"...

Bye :cool:

otto_cb
20-08-2004, 22.29.29
Grazie della spiegazione, non sapevo che i puntatori avessero la stessa dimensione , credevo anzi che i puntatori avessero dimensioni defferenti a seconda del tipo, come per le variabili. E' poco che studio questo linguaggio ma , un puntatore è una variabile che contiene un indirizzo di memoria specifico , mentre una variabile contine un valore. Quindi patrei sapere cosa mi vuoi dire con la tua domada?

otto_cb
20-08-2004, 22.49.25
Originariamente inviato da LoryOne
Io ti pongo un'altra domanda:
Se con un puntatore punti alla locazione in memoria di un dato, quanto riusciresti ad indirizzare con un solo byte ?

ciao grazie di aver visto la mia domanda , ma ora potresti dirmi che cosa volevi dire con la tua?

Abbiamo detto che i puntatori indifferentemente dal tipo hanno uguale dimensione, quindi la differenza la fa variabile a o meglio il tipo a cui punta il puntatore , che è l'oggetto puntato. Che cosa intendi dire con la tua domanda , che forse visto che non ci sono distinzioni di grandezza tra i puntatori cioè che, visto che il valore restituito da code:

sizeof(long*)

è pari anche al valore di code :

sizeof(char *)

quindi con un puntatore qualsiasi è possibile puntare a qualsiasi tipo indistintamente?
Non capisco cosa intendi dire con un solo byte. Potresti darmi un altra spiegazione ?

Grazie

P8257 WebMaster
20-08-2004, 23.03.30
Vuol semplicemente dire che 1 byte è troppo poco per contenere le informazioni riguardanti un indirizzo di memoria ...

I puntatori sono entità che "puntano" ad uno specifico indirizzo di memoria (ove si trova il dato) .. come nella battaglia navale, è indispensabile che vi siano abbastanza informazioni per puntare a "quel" dato, avendo un singolo byte avresti troppo poche informazioni, come se nella battaglia navale io ti dicessi solo la riga e non la colonna, tu non riusciresti a tracciare il punto in cui voglio colpire.

Bye :cool:

otto_cb
20-08-2004, 23.18.27
Ok ricevuto, scusate ma è poco che studio questo linguaggio e ancora meno i puntatori , quindi grazie delle vostre spiegazioni sono state molto preziose perche mi hanno chiarito ancor piu il concetto di puntatore e variabile.

Grazie

Bye Bye