![]() |
![]() |
![]() |
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 parêntesis rectos. 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 parêntesis rectos. 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 manuseamento de strings (excepto para a primeira inicialização). Apenas na biblioteca standard se encontra uma vasta gama de funções de manuseamento de strings.
Uma declaração de uma string capaz de conter 50 caracteres:
char nome[51];
Como o C não manuseia strings directamente 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 (código 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 écran 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);
![]() |
1. Escreva um programa que leia um array de qualquer tipo do teclado (elemento a elemento), pergunte um valor ao utilizador, e procure esse valor no array, indicando a posição onde está, se for encontrado.
2. Escreva um programa que leia um texto do écran com múltiplas linhas e carácter a carácter. O fim do texto é marcado com EOF (end of file) que se obtém com Ctrl-D no Unix e Ctrl-Z no DOS. As linhas de texto deverão depois ser escritas no écran de trás para a frente (em reverso).
3. Escreva um programa que leia um texto (múltiplas linhas) até à ocorrência de EOF. O programa deverá fazer uma estatística do comprimento das palavras lidas, i. e., deverá indicar o número de palavras com 1 letra, o número de palavras com 2 letras, ..., etc.
![]() |
2006
Antônio Paulo Neto