> For the complete documentation index, see [llms.txt](https://mentebinaria.gitbook.io/manual-da-linguagem-gnu-c/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mentebinaria.gitbook.io/manual-da-linguagem-gnu-c/4.-alem-dos-inteiros/um-exemplo-com-arrays.md).

# Um Exemplo com Arrays

Uma função para calcular a média de três números é muito específica e limitada. Uma função mais geral calcularia a média de qualquer quantidade de números. Isso requer passar os números em um array. Um array é um objeto na memória que contém uma série de valores do mesmo tipo de dado. Este capítulo apresenta os conceitos básicos e o uso de arrays através de um exemplo; para a explicação completa, veja Arrays[^1].

Aqui está a definição de uma função para calcular a média de vários números de ponto flutuante, passados como tipo `double`. O primeiro parâmetro, `length`, especifica quantos números são passados. O segundo parâmetro, `input_data`, é um array que contém esses números.

```c
double
avg_of_double (int length, double input_data[])
{
  double sum = 0;
  int i;

  for (i = 0; i < length; i++)
    sum = sum + input_data[i];

  return sum / length;
}
```

O código anterior introduz a expressão para se referir a um elemento de um array: `input_data[i]` significa o elemento de índice `i` no array `input_data`. O índice do elemento pode ser qualquer expressão com um valor inteiro; neste caso, a expressão é `i`. Veja [Acessando Elementos do Array](#user-content-fn-1)[^1].

O menor índice válido em um array é 0, *não* 1, e o maior índice válido é um a menos que o número de elementos. (Isso é conhecido como *indexação com origem zero*.)

Este exemplo também introduz a maneira de declarar que um parâmetro de função é um array. Tal  declaração é feita após o nome do parâmetro. Assim como `double foo` declara que `foo` é do tipo `double`, `double input_data[]` declara que cada elemento de `input_data` é do tipo `double`. Portanto, `input_data` em si tem o tipo "array de double".

{% hint style="info" %}
É muito comum em textos técnicos em inglês você encontrar as palavras *foo*, *bar* ou *foobar*. Elas são utilizadas para passar uma ideia de "qualquer coisa", ou "qualquer nome", ou seja, a ideia de que o nome não importa. Em português, seria equivalente ao modo como nos referenciamos a pessoas desconhecidas com "fulano" ou "cicrano".
{% endhint %}

Ao declarar um parâmetro que é um array, não é necessário dizer qual é o comprimento do array. Neste caso, o parâmetro `input_data` não tem informação de comprimento. É por isso que a função precisa de outro parâmetro, `length`, para que o chamador forneça essa informação para a função `avg_of_double`.

{% hint style="info" %}
O nome *avg\_of\_double* é uma forma abrevidada de *average of double*. Em inglês, *average* é *média*. Já *length*, traduz para tamanho (no caso do código de exemplo, tamanho do array -em outras palavras, o número de elementos do array). Temos também *input\_data* (dados de entrada) e *sum* (soma).
{% endhint %}

[^1]: Capítulo pendente de tradução


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://mentebinaria.gitbook.io/manual-da-linguagem-gnu-c/4.-alem-dos-inteiros/um-exemplo-com-arrays.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
