Qualcuno potrebbe spiegare esattamente il concetto di scopo e durata della variabile in C. È diverso in C++? Sono confuso tra scopo e vita.Scope vs durata della variabile in C
risposta
L'ambito è la regione in cui la variabile è accessibile.
La durata è l'intervallo di tempo durante il quale un oggetto rimane valido.
Un semplice esempio:
#include <iostream.h>
void doSomething()
{
x = 5; //Error! Not Accessible
}
int main()
{
int x = 4;
std::cout<< x << endl;
{
int x = 2;
cout << x << endl;
}
doSomething();
std::cout<< x << endl;
return 0;
}
Quanto sopra
dà l'output:
Nel programma precedente,
durata variabile x = 4
è t in tutto il resto, cioè: rimane vivo durante l'esecuzione del main, inoltre è accessibile all'interno del main, che è il suo scopo. Si noti che non è accessibile nella funzione perché è oltre l'ambito della variabile x
.
mentre l'ambito e la durata della variabile x = 2
si trova all'interno delle parentesi graffe di supporto {
}
all'interno del main.
"rimane valido" significa "in uso"? In che modo fa la differenza con l'ambito della variabile? –
@ R.MartinhoFernandes: beh, non è corretto parlare della durata di una variabile, dal momento che una variabile è un oggetto. come ricordo lo standard definisce una variabile come oggetto con nome. tuttavia, probabilmente non ho senso ora, e probabilmente è a causa di una revisione della cronologia SO che rimuove il contesto originale della tua osservazione? –
Seguito del commento di Alf: una variabile è un'associazione di un simbolo (nome) e un oggetto. La vita riguarda l'oggetto (e solo l'oggetto); scope riguarda il simbolo (e solo il simbolo). –
"Scope" di una variabile è un'area del codice sorgente, in cui è possibile fare riferimento a tale variabile.
"Durata" indica la durata dell'esecuzione del programma.
per default la durata di una variabile locale è lo stesso come il suo campo di applicazione:
void foo()
{
int x = 123;
cout << x << endl;
x += 1;
}
int main(){ foo(); foo(); foo(); }
Qui, ogni volta foo
viene chiamato un nuovo x
viene creato (lo spazio è riservato in pila), e quando l'esecuzione lascia il blocco in cui è stato dichiarato x
, viene eliminato x
(che per int
significa solo che lo spazio che era riservato, ora è liberato per il riutilizzo).
Al contrario:
void foo()
{
static int x = 123;
cout << x << endl;
x += 1;
}
int main(){ foo(); foo(); foo(); }
Qui, dal momento che x
è dichiarato static
, lo spazio è riservato per x
prima dell'esecuzione programma inizia ancora. x
ha una posizione fissa in memoria, è una variabile statica . E C++ ha regole speciali sull'inizializzazione di tale variabile: accade la prima volta che l'esecuzione passa attraverso la dichiarazione.
Pertanto, nella prima chiamata di foo
questo x
è inizializzato, l'istruzione output visualizza 123, e l'incremento aumenta il valore di 1 unità chiamata successiva l'inizializzazione viene saltata (che è già stata eseguita), il valore 124 viene emesso e il valore viene nuovamente incrementato. Presto.
La durata di questo x
è dall'inizio dell'esecuzione alla fine dell'esecuzione.
L'ambito di una variabile viene determinato al momento della compilazione. È la regione nel programma in cui lo stesso oggetto definito tramite la definizione è accessibile tramite tale identificativo.
La durata di un oggetto è una funzionalità definita in fase di esecuzione, attraverso il flusso di esecuzione. È possibile accedere a un oggetto tramite un puntatore anche se la variabile attraverso la quale è stata definita non è nell'ambito.
void f(char *a) {
*a = 'f';
}
void g(void) {
char aChar = ' ';
f(&aChar);
}
Ecco l'ambito di variabili aChar
(l'identificatore) è l'organo di g
. Durante l'esecuzione di g
la durata dell'oggetto si espande fino all'esecuzione di f
. L'utilizzo dell'identificatore aChar
all'interno di f
sarebbe illegale, il compilatore potrebbe dirti qualcosa come "l'indetificatore sconosciuto aChar
nella funzione f
". L'uso di un puntatore su quell'oggetto come sopra è completamente legale.
L'ambito di una variabile si riferisce alla misura in cui diverse parti di un programma hanno accesso alla variabile. Le variabili possono essere dichiarate come:
all'interno di una funzione che si chiama variabili locali o variabili interne.
Al di fuori di tutte le funzioni chiamate variabili globali o variabili esterne e durata o "estensione" si estende per l'intera esecuzione del programma.
Ecco tutorial dettagliato sulle variabili con gli esempi: What is variable in C
E per quanto riguarda scope vs. vita per la domanda? Ambito – J0e3gan
- definizione delle parti di un programma che possono accedere a una variabile a vita - definizione quando una variabile viene creata e distrutta –
- 1. Angularjs: $ scope vs scope
- 2. C vs C++ switch definizione della variabile vs dichiarazione
- 3. Laravel Blade @ scope variabile scope
- 4. $ scope. $ EvalAsync vs $ scope. $ ApplyAsync
- 5. VB.NET Per funzione di ciclo scope vs scope scope
- 6. scope variabile python in funzioni nidificate
- 7. Correttezza dello scope variabile
- 8. $ scope vs questa prestazione
- 9. In strato SpringMVC Controller, @Scope ("prototipo") vs @Scope ("Singleton")
- 10. Durata dei membri della classe C++
- 11. Inizializzazione della variabile in C++
- 12. interfaccia obiettivo-c - dichiarazione della variabile vs solo proprietà?
- 13. funzione vs dichiarazione di variabile in C++
- 14. Qual è la durata della variabile all'interno del blocco?
- 15. Elimina proprietà dalla variabile scope
- 16. $ scope $. $ Apply vs $ timeout safe $
- 17. App.config: User vs Application Scope
- 18. scope lessicale in Python vs ML
- 19. volta Durata VS Compile (NET)
- 20. Rubino - scope lessicale vs Inheritance
- 21. Stack e scope C++
- 22. C++: puntatori e scope
- 23. bean gestito con scope sessione vs bean stateful vs httpsession
- 24. Qual è la durata e l'ambito della variabile di loop inclusa?
- 25. Passare il "nome" della variabile in C++
- 26. nome di stampa della variabile in C#
- 27. Impostazione della variabile in bash -c
- 28. destroy scope/child scope on scope destroy
- 29. scope variabile xslt e il suo utilizzo
- 30. accesso variabile scope dinamico $ all'interno html
Come acept la risposta? – vikky