Menu


terça-feira, 18 de maio de 2010

Ponteiros e Alocação Dinâmica

Para a manipulação do espaço da memória do computador, a linguagem C utiliza parâmetros e ponteiros em que possibilitam a alteração da informação do elemento ou da posição na memória em que o elemento se encontra.

O parâmetro pode ser descrito como uma passagem da informação original pelo valor da variavel e que pode ser utilizada em outras partes do algoritmo, esses parâmetros podem obter a informação do vetor ou de uma variável e transmitir para outra parte do programa, além de transmitir a informação, os parâmetros tem a capacidade de permitir que o algoritmo modifique a variável que será transmitida.

Tenenbaum; Langsam; Augenstein; (1995 p.43) sugerem que o parâmetro de uma função em C precisa ser declarado dentro da função. Entretanto, a faixa de parâmetros de um vetor só é especificada no programa chamador. Isso ocorre porque em C não se aloca novo armazenamento para um parâmetro vetor. Em vez disso, o parâmetro refere-se ao vetor original que estava alocado no programa de chamada.

Para transmitir uma variável ou vetor como parâmetro, é preciso que ele esteja da mesma forma que foi declarado, ele sempre será transmitido como uma referência, então, as alterações realizadas na variável ou nos elementos do vetor altera a variável usada como parâmetro na sua chamada. (PINHO, S.D.).

#define Tam 10

void imprime_vetor (int tam, int vet[Tam])
{
int i;
for (i=0 ; i < Tam ; i++)
printf(“%d”, vet[ i ]);
}

void main( )
{
int Notas[Tam];
imprime_vetor (Tam, Notas);
}

O método “imprime_vetor” pode estar na mesma parte da programação ou em outra parte separada da tela original. Essa passagem dos elementos por parâmetros está somente transmitindo a informação dos valores, ou seja, caso os elementos transmitidos forem alterados eles não sofrerão a alteração na função que os referenciou.

As matrizes também podem ser utilizadas por parâmetros na programação de algoritmos.

#define Lin 5
#define Col 5

void ImprimirDados (mat[lin][col])
{
int i, j;
for (i = 0; i < lin; i ++)
for (j =0; j < col; j ++)
printf(“%d”, mat[ i ][ j ])
}

void main ()
{
int mat[lin][col]
ImprimirDados (mat);
}

Os parâmetros por referência podem transmitir as informações de modo que elas sejam alteradas pelos comandos dentro do algoritmo ou programa.

void acrescenta (int *A)
{
*A = *A + 1;
}
void main ( )
{
int i, vetor[10];
for (i = 0; i < 10; i ++)
acrescenta(&vet[ i ])
}

Na declaração de parâmetros, existe o conceito de ponteiros. Os ponteiros são úteis para fornecer meios para alterar os comandos das funções dos algoritmos ou o conteúdo das variáveis, podem suportar as tarefas de alocação dinâmica que é obter memória ou utilizá-la enquanto está em execução e aumentam o recurso das tarefas dos programas. (MANSSOUR, 2001).

Manssour; (2001) afirma que um ponteiro é uma variável que contém um endereço de memória. Esse endereço é normalmente uma posição de outra variável de memória. Se uma variável contém o endereço de outra, então a primeira variável é dita para apontar para outra como na figura abaixo.


Figura: Uma Variável que aponta para outra (SCHILDT, 1996 apud MANSSOUR, 2001).

O ponteiro possui dois operadores de manipulação e declaração: “&” e “*”. O operador “&” retorna o endereço de memória da variável.

int *a, rec=10;
a = &rec;

A variável “a” recebe o endereço de memória da variável “rec”. É importante entender que a variável “a” não recebe o valor de “rec”, mas sim o lugar em que a variável “rec” se encontra.

O outro operador “*” retorna o valor da variável no endereço localizado, ou seja, os dois operadores podem estar interligados para que funcionem da melhor maneira.

int *a, rec=10, b;
a = &rec;
b = *a;

A variável “b” recebe o valor ou o conteúdo da variável “a” que está localizada na variável “rec”, então a variável “b” terá valor 10.

Os operadores apesar de realizarem um comando parecido eles são distintos, pois um vai à posição em que o se encontra o endereço da variável e o outro recebe o valor em que se encontra o endereço da variável.

Os conceitos de ponteiros e parâmetros são úteis para o desenvolvimento das programações e algoritmos de estruturas de dados, pelo fato que o programador pode manipular a localização da variável na memória, aumentar a capacidade de funções do programa e evitar que erros graves de programação ocorram porem se o programador não dominar ou entender as tarefas que os ponteiros ou parâmetros estão realizando poderá levar a vários erros graves dentro do programa.

Os ponteiros abrangem grande parte das estruturas que podem ser implementadas aos programas ou algoritmos. Um dos conceitos que mais utilizam ponteiros e parâmetros é o conceito de listas.

Nenhum comentário:

Postar um comentário