Sto avendo semplice codice come segue:Qual è l'indirizzo stampato da printf() con un formato% p in c?
#include<stdio.h>
int glob;
int main(void)
{
int a;
printf("&a is : %p \n", &a);
printf("glob is : %p \n", &glob);
return 0;
}
uscita del programma di cui sopra è: Prima esecuzione:
&a is : 0x7fff70de91ec
glob is : 0x6008f4
Seconda manche:
&a is : 0x7fff38c4c7ac
glob is : 0x6008f4
sto studiando su virtuale & indirizzi fisici. Ho una domanda seguente:
- Qual è l'indirizzo stampato (fisico/virtuale) della variabile "a"?
- Se è virtuale, come cambia in ogni esecuzione dello stesso programma? Come ho capito il compilatore fornisce l'indirizzo virtuale alle variabili al momento della compilazione?
- Perché l'indirizzo della variabile globale è costante in ogni esecuzione del programma?
In eseguito questo programma su Linux: 2.6.18-308.el5 x86_64 GNU/Linux
compilato utilizzando: versione di gcc 4.1.2 20.080.704 (Red Hat 4.1.2-52)
Il tuo programma richiama ** comportamento non definito **. A '% p' deve essere dato un ptr-to-void, quindi è necessario eseguire il cast a' (void *) 'in entrambi i printfs. – Jens
@Jens L'argomento non dovrebbe essere gettato implicitamente in 'void *'? –
@VilhelmGray le conversioni implicite avvengono quando è previsto un tipo, ma non ci sono tipi in una funzione variadica. – effeffe