A declaração de vetores e matriz dependem de outros tipos de dados primitivos ou não. 
                Todos os tipos fornecidos pela linguagem C pode ser utilizados.
            
            
                As operações básicas sobre vetores/matrizes podem ser vistos em 
                C: Vetor/Matriz.
            
            Sintaxe
            tipo_dado nome_vetor[<tamanho>] = {valor1,valor2,valorN};
tipo_dado nome_vetor[<tamanho>];
tipo_dado nome_matriz[<linhas>][<colunas>] = {{val1, val2, valN}, //linha 1
                                             {val1, val2, valN}, //linha 2
                                             {val4, val5, valN}};//linha N
tipo_dado nome_matriz[<linhas>][<colunas>]; //espaço reservado
            Onde
            tipo_dado: tipo de dado primitivo, derivado ou outro
<tamanho>: quantidade de elementos ou dimensão
<linhas>: número de linhas da matriz
<colunas>: número de colunas da matriz
            
                Tanto matrizes quanto vetores quando não iniciado possuem os espaços reservados 
                baseados em suas dimensões ou linhas/colunas.
            
            Exemplo 6
            
#include <stdio.h>
union uniao
{
    char valor1;  float valor2; int valor3;
};
enum enumerador { VALOR1, VALOR2, VALOR3 };
struct teste
{
    int codigo;  char sexo;  char *nome;
};
void main()
{
    //vetor
    struct teste vetor_struct[2];
    enum enumerador vetor_enum[2];
    union uniao vetor_uniao[2];
    
    char vetor_char[2];
    int vetor_int[2];
    float vetor_float[2];
    double vetor_double[2];
    
    //matriz
    struct teste matriz_struct[2][2];
    enum enumerador matriz_enum[2][2];
    union uniao matriz_uniao[2][2];
    
    char matriz_char[2][2];
    int matriz_int[2][2];
    float matriz_float[2][2];
    double matriz_double[2][2];
}
            Saída
            -