Qualcuno potrebbe elaborare il comportamento di riferimento in questo codice e perché è la stampa di 12 in prima linea al posto di 11.riferimenti in C++ con funzione
seguito è riportato il codice di
#include <cstdio>
using namespace std;
int &fun()
{
static int x = 10;
x++;
return x;
}
int main()
{
int *ptr=&fun();
int *ptr1=&fun();
printf("%p %p \t %d %d",(void*)ptr,(void*)ptr1,*ptr,*ptr1);
return 0;
}
l'output del codice è
134519132 134519132 12 12
spiegare perché è sempre stampato in prima convocazione non ho capito quando seconda chiamata viene fatta deve stampare 12
Grazie per aver segnalato il mio errore nel pensare che printf() stampa * ptr non appena è disponibile. –
Potresti per favore elaborare perché printf() viene chiamato dopo che entrambi i valori sono stati calcolati –
@Raghib Ahsan Perché questo è il tipo di linguaggio C. In C descrivi cosa dovrebbe accadere in modo che l'ordine in quello che scrivi è l'ordine in cui il codice viene eseguito. Il tuo printf viene scritto dopo le istruzioni che eseguono le funzioni, quindi i valori vengono calcolati per primi e solo allora il tuo programma rilegge i risultati e lo stampa. Leggi la pagina wiki su C, e in particolare segui il link sulla programmazione imperativa nella prima frase, se vuoi saperne di più. [link] (https://en.wikipedia.org/wiki/C_ (programming_language)) – Nathilion