Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Quando você inicializa tipos escalares, o valor da assignment-expression variável é atribuído. As regras de conversão para atribuição se aplicam. (Consulte conversões de tipo para obter informações sobre regras de conversão.)
Sintaxe
declaration:
declaration-specifiers
init-declarator-list
optar;
declaration-specifiers:
storage-class-specifier
declaration-specifiers
optar
type-specifier
declaration-specifiers
optar
type-qualifier
declaration-specifiers
optar
init-declarator-list:
init-declarator
init-declarator-list
,
init-declarator
init-declarator:
declarator
declarator
=
initializer /* Para inicialização escalar */
initializer:
assignment-expression
Você pode inicializar variáveis de qualquer tipo, desde que obedeça às seguintes regras:
Variáveis declaradas no nível do escopo do arquivo podem ser inicializadas. Se você não inicializar explicitamente uma variável no nível externo, ela será inicializada como 0 por padrão.
Uma expressão constante pode ser usada para inicializar qualquer variável global declarada com o
staticstorage-class-specifier. As variáveis declaradas para seremstaticinicializadas quando a execução do programa começa. Se você não inicializar explicitamente uma variável globalstatic, ela será inicializada como 0 por padrão e cada membro que tiver o tipo de ponteiro será atribuído a um ponteiro nulo.As variáveis declaradas com o
autoespecificador da classe de armazenamento ouregisterde armazenamento são inicializadas sempre que o controle de execução passa para o bloco no qual são declaradas. Se você omitir um inicializador da declaração de umaautoouregistervariável, o valor inicial da variável será indefinido. Para valores automáticos e de registro, o inicializador não está restrito a ser uma constante; pode ser qualquer expressão que envolva valores definidos anteriormente, até mesmo chamadas de função.Os valores iniciais para declarações de variáveis externas e para todas as
staticvariáveis, sejam externas ou internas, devem ser expressões constantes. Para obter mais informações, consulte Expressões Constantes. Como o endereço de qualquer variável estática ou declarada externamente é constante, ele pode ser usado para inicializar uma variável de ponteiro declaradastaticinternamente. No entanto, o endereço de umaautovariável não pode ser usado como um inicializador estático porque pode ser diferente para cada execução do bloco. Você pode usar valores constantes ou variáveis para inicializarautoeregistervariáveis.Se a declaração de um identificador tiver escopo de bloco e o identificador tiver vinculação externa, a declaração não poderá ter uma inicialização.
Exemplos
Os exemplos a seguir ilustram as inicializações:
int x = 10;
A variável x inteiro é inicializada para a expressão 10constante.
register int *px = 0;
O ponteiro px é inicializado como 0, produzindo um ponteiro "nulo".
const int c = (3 * 1024);
Este exemplo usa uma expressão (3 * 1024) constante para inicializar c para um valor constante que não pode ser modificado devido à const palavra-chave.
int *b = &x;
Essa instrução inicializa o ponteiro b com o endereço de outra variável. x
int *const a = &z;
O ponteiro a é inicializado com o endereço de uma variável chamada z. No entanto, como ela é especificada para ser uma const, a variável a só pode ser inicializada, nunca modificada. Ele 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, portanto, tem 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, a tentativa de inicializar a variável static de lp ponteiro com o endereço não LOCAL é permitida. A static variável de ponteiro gp pode ser inicializada para o endereço porque GLOBAL esse endereço é sempre o mesmo. Da mesma forma, *rp pode ser inicializado porque rp é uma variável local e pode ter um inicializador não constante. Cada vez que o bloco é inserido, LOCAL tem um novo endereço, que é atribuído a rp.