Qual é o estado padrão de variáveis?
-
06-07-2019 - |
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?
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.