Declarações de estrutura
"Declaração de estruturar" nomeia um tipo e especifica uma seqüência de valores de variáveis (denominado "membros" ou "campos" da estrutura) que podem ter diferentes tipos.Um identificador opcional, chamado de "marca", fornece o nome do tipo de estrutura e pode ser usado em referências subseqüentes para o tipo de estrutura.Uma variável do tipo estrutura mantém toda a seqüência definida por esse tipo.Estruturas de c são semelhantes aos tipos conhecidos como "registros" em outros idiomas.
Sintaxe
especificador de struct ou união:
identificador de estrutura ou união opt**{** struct-declaração-list }identificador de estrutura ou união
estrutura ou união:
structUnião
lista de declaração struct:
declaração de structdeclaração de struct da lista de declaração struct
O conteúdo da estrutura é definido como
declaração de struct:
lista de qualificador de especificador struct-Declarador-list ;lista de qualificador de especificador de:
especificador de tipo especificador qualificador lista optqualificador de tipo especificador qualificador lista opt
lista de Declarador de struct:
Declarador de structlista de Declarador de struct , Declarador de struct
Declarador de struct:
declarator
A declaração de um tipo de estrutura não Reserve espaço para uma estrutura.Ele é apenas um modelo para posteriores declarações de variáveis de estrutura.
A definido anteriormente identificador (marca) pode ser usada para se referir a um tipo de estrutura definido em qualquer lugar.Nesse caso, struct-declaração-list não pode ser repetido, desde que a definição é visível.Declarações de ponteiros para estruturas e definições de tipo para tipos de estrutura podem usar a marca de estrutura antes que o tipo de estrutura é definido.No entanto, a definição de estrutura deve ser encontrada antes a qualquer uso real do tamanho dos campos.Essa é uma definição incompleta do tipo e a marca de tipo.Para esta definição a ser concluída, uma definição de tipo deve aparecer mais tarde no mesmo escopo.
O struct-declaração-list Especifica os tipos e nomes dos membros da estrutura.A struct-declaração-list argumento contém um ou mais variável ou declarações de campo de bits.
Cada variável declarada em struct-declaração-list é definido como um membro do tipo structure.Declarações de variável dentro de struct-declaração-list têm a mesma forma como outras declarações de variável discutidas nesta seção, exceto que as declarações não podem conter especificadores de classe de armazenamento ou inicializadores.Os membros da estrutura podem ter quaisquer tipos de variáveis, exceto o tipo de void, um tipo incompleto ou um tipo de função.
Um membro não pode ser declarado ter o tipo da estrutura na qual ele aparece.No entanto, um membro pode ser declarado como um ponteiro para o tipo de estrutura em que aparece, desde que o tipo de estrutura tem uma marca.Isso permite que você crie listas vinculadas de estruturas.
Estruturas siga o mesmo escopo como outros identificadores.Os identificadores de estrutura devem ser diferentes de outros estrutura, união e marcas de enumeração com a mesma visibilidade.
Cada declaração de struct em um struct-declaração-list deve ser exclusivo dentro da lista.No entanto, o identificador de nomes em um struct-declaração-list não precisa ser diferente de nomes de variáveis comuns ou de identificadores em outras listas de declaração de estrutura.
Estruturas aninhadas também podem ser acessadas como se eles forem declarados no nível do escopo do arquivo.Por exemplo, dada a essa declaração:
struct a
{
int x;
struct b
{
int y;
} var2;
} var1;
Essas declarações são ambos legal:
struct a var3;
struct b var4;
Exemplos
Estes exemplos ilustram as declarações de estrutura:
struct employee /* Defines a structure variable named temp */
{
char name[20];
int id;
long class;
} temp;
The employee structure has three members: name, id, and class.O name membro é uma matriz de 20 elementos, e id e class são simples membros com int e longo digitar, respectivamente.O identificador employee é o identificador de estrutura.
struct employee student, faculty, staff;
Este exemplo define três variáveis de estrutura: student, faculty, e staff.Cada estrutura tem a mesma lista de três membros.Os membros são declarados ter o tipo de estrutura employee, definido no exemplo anterior.
struct /* Defines an anonymous struct and a */
{ /* structure variable named complex */
float x, y;
} complex;
O complex estrutura tem dois membros com float tipo, x e y.O tipo de estrutura não tem nenhuma marca e, portanto, sem nome ou anônimas.
struct sample /* Defines a structure named x */
{
char c;
float *pf;
struct sample *next;
} x;
Os dois primeiros membros da estrutura são uma char variável e um ponteiro para uma float valor.O terceiro membro, next, é declarado como um ponteiro para o tipo de estrutura que está sendo definido (sample).
Estruturas anônimas podem ser útil quando a marca de chamada não é necessária.Esse é o caso quando uma declaração define todas as instâncias da estrutura.Por exemplo:
struct
{
int x;
int y;
} mystruct;
Estruturas incorporadas geralmente são anônimas.
struct somestruct
{
struct /* Anonymous structure */
{
int x, y;
} point;
int type;
} w;
Específicos do Microsoft
O compilador permite que um conjunto de dimensões indefinido ou tamanho zero como o último membro de uma estrutura.Isso pode ser útil se o tamanho de uma matriz constante é diferente quando usado em várias situações.A declaração dessa estrutura tem esta aparência:
struct identificador**{** conjunto de declarações, na Digite o nome de matriz**[];};**
Conjuntos de dimensões indefinidos podem aparecer somente como o último membro de uma estrutura.Estruturas contendo declarações de matriz de dimensões indefinidas podem ser aninhadas dentro de outras estruturas, desde que não há mais membros declarados em qualquer delimitadoras estruturas.Matrizes de tais estruturas não são permitidas.O sizeof operador, quando aplicado a uma variável desse tipo ou para o tipo propriamente dito, assume 0 para o tamanho da matriz.
Declarações de estrutura podem ser especificadas sem um Declarador quando eles são membros de outra estrutura ou união.Os nomes dos campos são promovidos para a estrutura de delimitador.Por exemplo, uma estrutura sem nome é semelhante a:
struct s
{
float y;
struct
{
int a, b, c;
};
char str[10];
} *p_s;
.
.
.
p_s->b = 100; /* A reference to a field in the s structure */
Consulte estrutura e os membros da união para informações sobre referências de estrutura.
Específicos do Microsoft final