|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
20-08-2004, 15.45.53 | #1 |
Newbie
Registrato: 01-08-2004
Messaggi: 18
|
Puntatori a carattere
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 |
20-08-2004, 16.09.04 | #2 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
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 |
20-08-2004, 19.11.47 | #3 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
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 ? |
20-08-2004, 19.27.12 | #4 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Forse si confonde tra "puntatore" e "oggetto puntato"...
Bye |
20-08-2004, 23.29.29 | #5 |
Newbie
Registrato: 01-08-2004
Messaggi: 18
|
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?
|
20-08-2004, 23.49.25 | #6 | |
Newbie
Registrato: 01-08-2004
Messaggi: 18
|
Quota:
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 |
|
21-08-2004, 00.03.30 | #7 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
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 |
21-08-2004, 00.18.27 | #8 |
Newbie
Registrato: 01-08-2004
Messaggi: 18
|
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 |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
[OpenOffice.org 2.0.4 - CALC] Modifica carattere standard | atreyu | Office suite | 0 | 17-10-2006 12.28.02 |
[XP SP2] Carattere di sistema cambiato da solo | nextpaco | Windows 7/Vista/XP/ 2003 | 21 | 30-01-2006 20.10.51 |
Aumentare dimensione carattere FrontPage | MEGS | Software applicativo | 11 | 12-11-2005 00.22.52 |
[Java] Da ASCII a carattere | GiulioCesare | Programmazione | 0 | 18-09-2005 13.48.55 |
Problema di paging, File System e puntatori animati in Win ME | Ciobby | Windows 9x/Me/NT4/2000 | 4 | 11-05-2005 00.20.35 |