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

m
(Atualizando a categoria do livro, com AutoCat (detalhes). utilizando AWB)
 
=====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====
No parágrafo sobre [[#Arranjos como parâmetros de funções|arranjos como parâmetros de funções]], aludimos ao fato de que um arranjo C nada mais é que o endereço onde está guardado o primeiro elemento. Portanto, um arranjo pode ser visto como um espécie de ponteiro. O parágrafo sobre [[#Aritmética de ponteiros|aritmética de ponteiros]] explora mais a relação entre ponteiros e arranjos.
 
Observe então que se temos um arranjo <tt>A</tt> de valores do tipo <tt>t</tt>, então o valor de <tt>A</tt> nada mais é que <tt>&A[0]</tt>, a expressão que representa o endereço do elemento na primeira posição.
 
====Aritmética de ponteiros====
Similarmente, se <tt>p</tt> é um ponteiro para o tipo <tt>T</tt>, a expressão <tt>p-n</tt> é igual à <math>n</math>-ésima posição anterior que aponta para o tipo <tt>T</tt>.
 
Observe então que se temos um arranjo <tt>A</tt> de valores do tipo <tt>t</tt>. O valor de <tt>A[n]</tt> é igual a <tt>A+n</tt>: as duas expressões são equivalentes.
 
Na expressão <tt>p1-p2</tt>, ambos ponteiros devem apontar para elementos do mesmo arranjo (ou para a primeira posição após a última posição do arranjo), e o resultado será a diferença entre as posições desses elementos no arranjo.