Jaká je výchozí stav proměnných?

hlasů
4

Když C program spustí a proměnné jsou přiřazeny paměťových míst, se standardní C říci, zda se inicializuje, že hodnota?

// global variables
int a;
int b = 0;
static int c;

Ve výše uvedeném kódu, ‚b‘ budou nastaveny na 0. Jaká je výchozí hodnota ‚a‘? Je ‚c‘ nic jiného, ​​protože to je statická do tohoto modulu?

Položena 17/06/2009 v 13:18
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
11

Vzhledem k tomu, konkrétně zmínit globální proměnné: V případě globálních proměnných, ať už jsou prohlášeny staticnebo ne, budou inicializována na hodnotu 0.

Lokální proměnné na druhé straně bude definována (pokud jsou deklarovány static, v takovém případě oni budou inicializovány na 0 - díky Tyler McHenry). V překladu to znamená, že nelze spoléhat na ně obsahující nějakou zvláštní věc - budou jen obsahovat jakýkoliv náhodný odpadky byl již v paměti, že na místě, které by mohly být odlišná od run pro spuštění.

Odpovězeno 17/06/2009 v 13:23
zdroj uživatelem

hlasů
5

Edit: Následující vztahuje pouze na lokální proměnné - ne Globals.

Počáteční hodnota proměnné je definován. V některých jazycích umístění proměnná v paměti zero'd se na prohlášení, ale v C (a C ++, stejně), neinicializované proměnná bude obsahovat jakékoliv odpadky, který žije v tomto místě v té době.

Takže nejlepší způsob, jak myslet na to, že neinicializované proměnná bude s největší pravděpodobností obsahovat odpadky a mají nedefinované chování.

Odpovězeno 17/06/2009 v 13:19
zdroj uživatelem

hlasů
4

abude nula, a ctaké v případě, že jsou globální a není explicitně inicializovat. To platí také pro místní statické proměnné.

Pouze místní non-statické proměnné nejsou inicializovány. Také přidělené paměti s malloc není inicializován.

Viz herepravidla pro inicializaci a přidělování v jazyce C pro různé objekty.

Odpovězeno 17/06/2009 v 13:26
zdroj uživatelem

hlasů
1

Jsem dnes ráno psaní způsob příliš pomalu. Tři lidé objevilo rychle, když jsem odpovídal, tak jsem odstranil většinu svého příspěvku. Odkaz jsem zjistil, byla jasná a stručná, tak jsem vysílání, které v každém případě: Wikipedia na „neinicializované proměnné“ k diskusi o základních otázkách.

Odpovězeno 17/06/2009 v 13:29
zdroj uživatelem

hlasů
0

Rychlý test ukazuje, A a C 0.

int a;
static int c;
int main() {
    printf("%d %d\n", a, c);
    return 0;
}

Místo s (a, c) se stanovuje při kompilaci; to znamená, že už ani na zásobník ani na paměťové intervalu vrácené malloc. Myslím, že norma C říká, že jsou nastaveny na 0 ve všech případech, a pak.

Jsem 99,9% jisti, pokud jde c, a 98% věří, co se týče a. Klíčové slovo staticv kontextu globálních proměnných, skutečně je analogická privatev (řekněme), C ++ a Java: je to o viditelnosti, ne paměťovém médiu.

Co Andrew Hare říká o neinicializované proměnné platí pro data uložená v zásobníku nebo v malloc'd paměti. Ne tak pro staticky uložené proměnné.

Odpovězeno 17/06/2009 v 13:25
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more