Inicializando tipos escalares
Quando Inicializando scalar digita, o valor da expressão de atribuição de é atribuído à variável.Aplicam-se as regras de conversão para atribuição.(Consulte As conversões de tipo para obter informações sobre as regras de conversão.)
Sintaxe
declaration:
especificadores de declaração init-Declarador-list opt**;**especificadores de declaração:
especificadores de declaração de especificador de classe de armazenamento optespecificadores de declaração de especificador de tipo opt
especificadores de declaração de qualificador de tipo opt
Init-Declarador-list:
Declarador de initInit-Declarador-list , Declarador de init
Declarador de init:
DeclaradorDeclarador = inicializador / * para inicialização escalar * /
inicializador de:
expressão de atribuição
Você pode inicializar variáveis de qualquer tipo, desde que você obedecem às seguintes regras:
Variáveis declaradas no nível do escopo do arquivo podem ser inicializadas.Se você explicitamente não inicializar uma variável no nível externo, ele é inicializado como 0 por padrão.
Uma expressão constante pode ser usada para inicializar qualquer variável global declarado com o estáticoespecificador de classe de armazenamento. As variáveis declaradas para ser estático são inicializadas quando começa a execução do programa.Se você não explicitamente inicializar um global estático variável, ele é inicializado como 0 por padrão, e cada membro que tenha o tipo de ponteiro é atribuído a um ponteiro nulo.
Variáveis declaradas com a auto ou registrar o especificador de classe de armazenamento são inicializados toda vez que passa o controle de execução para o bloco no qual elas são declaradas.Se você omitir um inicializador de declaração de um auto ou registrar variável, o valor inicial da variável é indefinido.De, automático e valores do registro, o inicializador não está restrito a ser uma constante; ele pode ser qualquer expressão envolvendo valores previamente definidos, chamadas de função do mesmo.
Os valores iniciais para as declarações de variáveis externas e para todas as estático variáveis, se externo ou interno, devem ser expressões constantes.(Para obter mais informações, consulte Expressões constantes.) Como o endereço de qualquer variável externamente declarado ou estático é constante, ele pode ser usado para inicializar internamente declarado estático variável de ponteiro.No entanto, o endereço de um auto variável não pode ser usado como um inicializador estático porque ele pode ser diferente para cada execução do bloco.Você pode usar valores de constantes ou variáveis para inicializar auto e registrar variáveis.
Se a declaração de um identificador tem escopo de bloco e o identificador tem ligação externa, a declaração não pode ter uma inicialização.
Exemplos
Os exemplos a seguir ilustram as inicializações:
int x = 10;
A variável integer x é inicializado para a expressão de constante 10.
register int *px = 0;
O ponteiro px é inicializado para 0, produzindo um ponteiro "nulo".
const int c = (3 * 1024);
Este exemplo usa uma expressão constante (3 * 1024) para inicializar c com um valor de constante não pode ser modificado devido a const palavra-chave.
int *b = &x;
Esta declaração inicializa o ponteiro b com o endereço de outra variável, x.
int *const a = &z;
O ponteiro a é inicializada com o endereço de uma variável chamada z.No entanto, já que ele está especificado para ser um const, a variável a somente pode ser inicializado, nunca foi modificado.Sempre aponta para o mesmo local.
int GLOBAL ;
int function( void )
{
int LOCAL ;
static int *lp = &LOCAL; /* Illegal initialization */
static int *gp = &GLOBAL; /* Legal initialization */
register int *rp = &LOCAL; /* Legal initialization */
}
A variável global GLOBAL é declarada no nível externo, para que ele tenha tempo de vida global.A variável local LOCAL tem auto classe de armazenamento e tem apenas um endereço durante a execução da função na qual é declarada.Portanto, tentar inicializar o estático variável de ponteiro lp com o endereço do LOCAL não é permitido.O estático variável de ponteiro gp podem ser inicializados para o endereço do GLOBAL porque esse endereço é sempre o mesmo.Da mesma forma, *rp pode ser inicializado porque rp é uma variável local e pode ter um inicializador de nonconstant.Cada vez que o bloco for inserido, LOCAL tem um novo endereço, em seguida, é atribuído a rp.