# Outros Tipos de Dados

Além dos tipos primitivos, C oferece várias formas de construir novos tipos de dados. Por exemplo:

* Você pode definir **ponteiros**, valores que representam os endereços de outros dados (veja [*Ponteiros*](#user-content-fn-1)[^1]).
* Pode definir **estruturas**, como em muitas outras linguagens (veja [*Estruturas*](#user-content-fn-1)[^1]).
* Pode criar **uniões**, que definem múltiplas formas de interpretar o conteúdo do mesmo espaço de memória (veja [*Uniões*](#user-content-fn-1)[^1]).
* **Enumerações** são coleções de códigos inteiros nomeados (veja [*Tipos de Enumeração*](#user-content-fn-1)[^1]).

Os tipos de **arrays** em C são usados para alocar espaço para objetos, mas C não permite operar sobre um valor de array como um todo. Veja [*Arrays*](#user-content-fn-1)[^1].

{% hint style="info" %}
O último parágrafo explica que não podemos fazer coisas como `int array[] = 10` em C (não conheço linguagem que permita operar arrays assim). Por serem conjunto de dados, é preciso operar sobre seus elementos, por exemplo, `array[0] = 10`.
{% endhint %}

[^1]: Pendente de tradução
