Os arrays em C são semelhantes aos que são definidos e
usados em outras linguagens. No entanto há algumas diferenças
na sintaxe de declaração e utilização e alguma interligação
com os apontadores, como veremos mais à frente.
Os arrays declaram-se no C como se declaram as outras variáveis, acrescentando apenas um valor para a sua dimensão. Assim começa-se por indicar o tipo de valores que vão estar contidos em cada posição do array, seguindo-se o nome do próprio, e terminando com a indicação da dimensão (nº de elementos) entre brackets [ ] . Por exemplo, para definir um array de 50 inteiros poderia usar-se a seguinte declaração:
int numbers[50];
Nota: Em C os arrays começam sempre no índice 0 e vão até ao valor da dimensão menos 1. Na definição de cima os índices válidos do array numbers vão desde 0 até 49.
O acesso aos elementos individuais do array faz-se utilizando também colchetes. Exemplos:
terceiro_valor = numbers[2];
numbers[5] = 100;
Os arrays multidimensionais declaram-se, indicando as várias dimensões umas a seguir às outras, da mesma forma que a primeira dimensão. Exemplo, para duas dimensões:
float matriz[50][50];
Para maiores dimensões basta acrescentar à declaração mais elementos [...]:
double big_array[10][10][22]...[8];
Os acessos aos elementos individuais faz-se da mesma forma:
valor = matriz[10][4];
matriz[0][1] = 100;
Nota: Em C os arrays são armazenados na memória por
forma a que dois elementos consecutivos (na memória)
correspondem prioritariamente a uma variação do último
índice. Para arrays bidimensionais, isso corresponde a um
armazenamento linha a linha.
Na linguagem C os strings são simplesmente arrays de caracteres. No entanto a linguagem propriamente dita não tem quaisquer facilidades para o manuseio de strings (excepto para a primeira inicialização). Apenas na biblioteca standard se encontra uma vasta gama de funções de manuseio de strings.
Uma declaração de uma string capaz de conter 50 caracteres:
char nome[51];
Como o C não manuseia strings diretamente todas as seguintes instruções são ilegais:
char nome[50], apelido[50], nome_completo[100];
nome = "Arnold"; /* Ilegal */
apelido = "Schwarznegger"; /* Ilegal */
nome_completo = "Mr. " + nome + ' ' + apelido; /* Ilegal */
No entanto a seguinte declaração com inicialização é válida:
char nome[50] = "Dave";
Para permitir a existência de strings de tamanho variável, quer a inicialização anterior, quer todas as funções de strings da biblioteca standard acrescentam um carácter final a todos os strings. Esse carácter (que marca o fim de um string) tem o valor 0 (zero) (dígito 0, não o carácter '0'). Se quisermos representar esse carácter podemos escrever '\0'.
A inicialização anterior produz a seguinte imagem na memória:
Para imprimir um string no vídeo pode usar-se a função printf(), com um especificador, no 1º parâmetro igual a %s, no local da variável do tipo string (char []):
printf("%s", nome);
[REV 04/2000]