Pergunta

Quando um programa em C começa e variáveis ??são atribuídas a locais de memória, faz a palavra padrão C se esse valor é inicializado?

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

No código acima, 'b' será inicializado a 0. O que é o valor inicial de 'a'? É 'c' diferente uma vez que é estático para este módulo?

Foi útil?

Solução

Uma vez que você menciona especificamente Global variáveis:. No caso de variáveis ??globais, se eles são declarados static ou não, eles vão ser inicializado para 0

Local variáveis, por outro lado será indefinido (a menos que eles são declarados static, caso em que eles também vão ser inicializado para 0 - graças Tyler McHenry). Traduzido, isso significa que você não pode confiar neles contendo qualquer coisa em particular -. Eles vão apenas conter o que lixo aleatório já estava na memória naquele local, que pode ser diferente a partir de Executar para executar

Outras dicas

Editar: O seguinte só se aplica a variáveis ??locais - não GLOBALS

.

O valor inicial de uma variável é indefinido. Em algumas linguagens de localização de uma variável na memória é zero'd out mediante declaração, mas em C (e C ++ também) uma variável não inicializada irá conter tudo o lixo que vidas naquele local naquele tempo.

Portanto, a melhor maneira de pensar sobre isso é que uma variável não inicializada provavelmente irá conter lixo e ter um comportamento indefinido.

a será zero, e c também, se eles são globais e não explicitamente inicializado. Isto também é verdade para as variáveis ??estáticas locais.

variáveis ??não-estáticas Apenas locais não são inicializados. Também memória alocada com malloc não é inicializado.

here para regras de inicializações e alocação em C para os diferentes objetos.

Eu estou escrevendo muito lentamente esta manhã. Três pessoas apareci rapidamente como eu estava respondendo, assim que eu removi a maioria do meu post. O link que eu encontrei foi clara e breve, assim que eu estou postando que de qualquer forma: Wikipedia em "variável não inicializada" para uma discussão sobre as questões básicas.

A mostra teste rápido a e c ser 0.

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

A localização de um (e c) são determinadas pelo tempo de compilação; isto é, eles estão nem colocado na pilha, nem em um intervalo de memória retornado por malloc. Eu acho que o padrão C diz que está inicializado para 0 em todos os casos, então.

Eu sou 99,9% confiante sobre em relação ao c, e 98% de confiança em relação a a. O static palavra-chave, no contexto de variáveis ??globais, realmente é análogo ao private em (digamos) C ++ e Java:. É sobre a visibilidade, não local de armazenamento

O que Andrew Hare diz sobre variáveis ??não inicializadas é verdade para os dados armazenados na pilha ou na memória malloc. Não é assim para variáveis ??estaticamente armazenados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top