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

Saltar para a navegação Saltar para a pesquisa
 
 
 
====Arranjos e ponteiros====
 
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.
 
====Aritmética de ponteiros====
 
Os operadores de adição e de subtração das linguagens C e C++ podem ser aplicadas a ponteiros. Em particular, as seguintes operações são legais:
* <tt>p + n</tt>, onde <tt>p</tt> é um ponteiro, e <tt>n</tt> é um inteiro;
* <tt>p - n</tt>, onde <tt>p</tt> é um ponteiro, e <tt>n</tt> é um inteiro;
* <tt>p1 - p2</tt>, onde <tt>p1</tt> e <tt>p2</tt> são ponteiros.
 
As duas primeiras expressões retornam ambas um novo ponteiro. O valor da expressão <tt>p+n</tt> é um ponteiro cujo valor é endereço de <tt>p</tt> somado com o produto de <tt>n</tt> com o tamanho do tipo apontado por <tt>p</tt>. Considere o seguinte código:
float * exemplo_de_aritmetica_de_ponteiros(float * p)
{
return p+1;
}
<tt>p</tt> é um ponteiro para o tipo <tt>float</tt>, que necessita de oito bytes para ser representado. A expressão <tt>p+1</tt> vai assim ser igual ao valor de <tt>p</tt> (que guarda um valor do tipo <tt>float</tt>) mais oito. Assim, se <tt>p</tt> é um ponteiro para um tipo <tt>T</tt>, a expressão <tt>p+1</tt> aponta para a posição seguinte que pode guardar um valor do mesmo tipo <tt>T</tt>.
 
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>.
 
===Tipos referências===
187

edições

Menu de navegação