|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 1520
|
quesito puntatori c++
char* frase="Ciao a tutti";
In poche parole vorrei sapere se questa istruzione alloca ed inizializza la variabile frase e contemporanemante ne dichiara anche un puntatore alla stessa con identico nome. Ultima modifica di danyroma80 : 20-08-2006 alle 12:27. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
"ciao a tutti" per forza di cose deve essere messo in memoria, suppongo nell'area statica.
il puntatore viene allocato e inizializzato al suo indirizzo ciao |
|
|
|
|
|
#3 |
|
Registered User
Iscritto dal: Aug 2006
Messaggi: 305
|
Indubbiamente nell'area statica
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
"area statica" non vuol dire nulla, è un mito introdotto nelle università per permettere ai professori di esprimere concetti che richiederebbero approfondimenti tecnici al di fuori dei loro scopi didattici
chiamiamo le cose coi loro nomi: i caratteri della stringa così dichiarata vengono messi in qualche sezione dati dell'eseguibile che non ricordo se è impostata a sola lettura o meno; per quanto riguarda l'allocazione della variabile invece dipende da dove la dichiariamo: se è una variabile locale allora se ne va nello stack ed è inizializzata manualmente a runtime dal codice generato dal compilatore (PUSH indirizzodelprimocarattere), mentre se è una variabile globale se ne va nella sezione dei dati inizializzati e viene inizializzata all'indirizzo che avrebbe il primo carattere della frase se il modulo fosse caricato al suo base address (cosa che per un eseguibile avviene praticamente sempre); ad ogni modo, a quel punto della sezione .data viene associato un fixup per l'eventuale rilocazione. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
ma come fate a mettere 12 caratteri in un char? non bisognerebbe scrivere
char frase[12]={'c','i','a','o',' ','a',' ','t','u','t','t','i'}; oppure il compilatore crea automaticamente un array? |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
a parte il fatto che non sono 12 ma 13
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Quote:
p.s. sono 12 |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
char* frase="Ciao a tutti"; allora sono 13 (è compreso il nullo '\0'). Se è dichiarato così: char frase[12]={'c','i','a','o',' ','a',' ','t','u','t','t','i'}; allora sono effettivamente 12. Però dipende da cosa ti serve e da come vuoi usarlo ... non è una stringa a tutti gli effetti perché non ha il nullo finale.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
non avevo pensato al nullo
|
|
|
|
|
|
#10 | |
|
Registered User
Iscritto dal: Aug 2006
Messaggi: 305
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
si che esistono (a parte il fatto che spesso e volentieri li spiegano male), l'espressione che non significa nulla non è ne' heap ne' stack: è "area statica" (che suppongo opporsi ad "area dinamica"), che non hai inventato tu perché la sento spesso anche da me (anche nei corsi di Sistemi Operativi
magari apro un caso su una pignoleria ma non è tanto questa cosa specifica, ma tutta la diffusa niubbaggine che affligge questa misteriosa specie animale che popola le università italiane (i professori), niubbaggine che si basa su tante di queste piccole cose |
|
|
|
|
|
#12 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
scusate se faccio sempre le domande nei post degli altri, ma ho anchio una domanda sui puntatori a char.
avendo una funzione che prende in argomento uno di questi puntatori a char, come devo passarlo alla funzione e come devo dichiarare l'argomento della funzione? void funzione(char* frase); e int main(){funzione(frase);} vanno bene? |
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
si
|
|
|
|
|
|
#15 |
|
Utente sospeso
Iscritto dal: Oct 2002
Messaggi: 2156
|
edit
__________________
sign editata dallo staff Ultima modifica di BountyKiller : 21-08-2006 alle 17:36. |
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ribadisco
Quote:
|
|
|
|
|
|
|
#17 |
|
Utente sospeso
Iscritto dal: Oct 2002
Messaggi: 2156
|
edit
__________________
sign editata dallo staff Ultima modifica di BountyKiller : 21-08-2006 alle 17:36. |
|
|
|
|
|
#18 | ||||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() Quote:
Quote:
![]() Quote:
Codice:
int main(); |
||||
|
|
|
|
|
#19 |
|
Utente sospeso
Iscritto dal: Oct 2002
Messaggi: 2156
|
ops ho letto male quello che ha scritto angel)..... per un attimo ho creduto che parlasse degli argomenti di main.....
__________________
sign editata dallo staff |
|
|
|
|
|
#20 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() Quote:
|
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:23.




















