De Objective Caml para C e C++/Construção de tipos: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 332:
====Os tipos ponteiros====
 
O conceito de ponteiro é fundamental em programação. Embora simples, ele pode ser a fonte de muitas confusões e erros muito súteis em programas. Um valor de algum tipo ponteiro é o (endereço de) umaum locaçãotrecho de memória que contemcorresponde uma certoalguma valorvariável. Portanto um ponteiro é algo que indica onde fica algo, digamos então que ''aponta'' para algo. Se uma variável <tt>v</tt> tem o tipo <tt>t</tt>, a expressão <tt>&v</tt> é portanto uma expressão de tipo ''ponteiro para <tt>t</tt>'', que é denotada <tt>t *</tt> (é o mesmo símbolo que o da multiplicação aritmética).
 
A sintaxe para declarar uma variável de um tipo ponteiro é a seguinte:
tipo * nome;
Nesse caso, <tt>nome</tt> é o nome da variável, e <tt>tipo</tt> é o tipo do valor que está na locação de memória apontada. Assim, o trecho de código seguinte fornece exemplos de uso dessa sintaxe:
int * a;
float x;
float * pf = &x;
Foram declaradas três variáveis:
* A variável <tt>a</tt> é um ponteiro para um trecho de memória que guarda um valor do tipo <tt>int</tt>. Observe que não tem inicialização e o valor de <tt>a</tt> é qualquer.
* A variável <tt>x</tt> é uma variável não ponteiro, do tipo <tt>float</tt>.
* A variável <tt>pf</tt> é uma variável de tipo ponteiro para <tt>float</tt>, ou <tt>float *</tt>. É inicializada com o endereço da variável <tt>x</tt>. Diz-se que <tt>pf</tt> aponta para <tt>x</tt>.
 
Oo símbolo <tt>*</tt> é associado a <tt>nome</tt> e não a <tt>tipo</tt>. Assim, se quisermos declarar mais de um ponteiro para o mesmo tipo de uma vez só, devemos repetir <tt>*</tt> antes de cada nome. Por exemplo:
int * p1, * p2;
 
=====Ponteiros e Objective Caml=====
Em Objective Caml, um conceito similar, embora mais geral, é o de referência. O conceito de referência OCaml corresponde ao de uma variável C/C++ e também ao de ponteiro. Assim, em OCaml, um valor de tipo <tt>int ref<tt> é alguma locação de memória que contem um valor do tipo <tt>int</tt> e que pode ser alterado (dizemos que é ''mutável''). Ou seja é exatamente a mesma coisa que uma variável C ou C++ do tipo int. Tal variável pode ser lida em expressões e alterada com atribuições. O equivalente a um ponteiro C para um inteiro, ou seja a um valor do tipo <tt>int *</tt> seria, em OCaml, um valor do tipo <tt>int ref ref</tt>: corresponde à memorização de um local onde um inteiro é memorizado.
 
====O operador de dereferenciamento====
 
====O ponteiro nulo====
 
====Aritmética de ponteiros====
 
===Tipos referências===