deleted

  • Autore discussione Utente cancellato 129487
  • Data d'inizio
U

Utente cancellato 129487

Ospite
deleted
 
Ultima modifica da un moderatore:

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
"\n" è una stringa letterale, allocata in RAM in celle read-only. Quando tu esegui cout << e + "\n" stai visualizzando il contenuto presente all'indirizzo della stringa + 138.
Il compilatore non ti permetterà di scrivervi, infatti:
Codice:
  *(e + "\n") = 10;
  e["\n"] = 20;
Codice:
In function ‘int main()’:
error: assignment of read-only location ‘*(((const char*)"\012") + ((sizetype)e))’
   *(e + "\n") = 10;
               ^
error: assignment of read-only location ‘"\012"[((int)e)]’
   e["\n"] = 20;
           ^
 
Ultima modifica:

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
grazie mille,solo che non ho capito bene una cosa,se con questa istruzione visualizzo cosa c'è all'interno dell'indirizzo di RAM datomi dalla somma tra quello di "\n"+138 allora perchè capita questo?:

se scrivo questo codice:

Codice:
int main()
{
char e=138;
cout<<"questo programma "<<e<<" stato scritto in C++\n";
cout<<"questo programma è stato scritto in C++\n";  //Da notare che è non viene visualizzato poichè nel CODICE ASCII non è presente la sua codifica
cout<<"è\t"<<e<<endl;
cout<<e+"\n"<<endl;
system ("PAUSE");
return 0;
}

in uscita ho questa schermata:
Visualizza allegato 103710

Altrimenti se eseguo quest'altro codice:

Codice:
int main()
{
char e=138;
cout<<e+"\n"<<endl;
system ("PAUSE");
return 0;
}

in uscita ho:
Visualizza allegato 103709

Quindi come è possibile questo?,e come se i cout chiamati prima influenzassero il contenuto dell'indirizzo di memoria dato dalla somma "\n"+138.......:grat:
Non ho sinceramente capito cosa tu intenda...
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Quindi adesso,la mia domanda è:
com'è possibile che eseguendo il primo codice ho come risultato il contenuto dell'indirizzo di memoria,mentre eseguendo il secondo ho semplicemente l'esecuzione di "\n"??
Come ti ho detto la stringa è allocata da qualche parte in memoria, a discrezione del SO. Il suo indirizzo non è costante. Al suo variare, chiaramente, cambia anche l'indirizzo risultante da quello spiazzamento.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!