A memória em um programa é dividida em duas partes: estática e dinâmica. Memória estática refere -se a variáveis de um tamanho fixo ao longo do curso do programa, enquanto a memória dinâmica se adapta ao tamanho das variáveis que o programa precisa. Por exemplo, se um programa precisar armazenar um número variável de strings, a memória dinâmica seria usada. Na linguagem C, Ponteiros duplos (**) são usados ao trabalhar com memória dinâmica.
O que é um ponteiro duplo (**)?
A Ponteiro duplo (**) é um ponteiro que aponta para a localização de outro ponteiro. A localização da variável na memória é indicada por este ponteiro adicional. Como resultado, quando um Ponteiro duplo (**) é atribuído a uma variável, dois níveis de endereço de memória são criados. Isso permite que o idioma C acesse a memória dinâmica mais facilmente. Na pilha de memória, um Ponteiro duplo (**) ocupa a mesma quantidade de espaço que um ponteiro comum.
Vejamos a sintaxe de um Ponteiro duplo (**):
data_type_of_pointer ** name_of_variable = & normal_pointer_variable;
Agora vamos ver um exemplo de usar Ponteiro duplo (**) em um programa C.
#incluir
int main ()
int val = 36;
int* ptr1;
int ** ptr2;
ptr1 = &val;
ptr2 = &ptr1;
printf ("O valor de Val é: %d \ n", val);
printf ("O valor de Val usando ponteiro único é: %d \ n", *ptr1);
printf ("O valor de Val usando ponteiro duplo é: %d \ n", ** ptr2);
retornar 0;
Estamos usando a variável “Val”Com o valor 36 no código acima. Então apontamos um ponteiro (ptr1) na direção do Val, que é direcionado na direção de um segundo ponteiro (ptr2) após. Mas os ponteiros não mudam o valor do 'Val', que permanece 36.
Saída
Ponteiros duplos (**) na linguagem de programação C se comporta de forma idêntica aos indicadores regulares em C. Como resultado, o Ponteiro duplo (**) O tamanho da variável e o tamanho da variável de ponteiro comum são sempre idênticos.
#incluir
int main ()
int val = 36;
int* ptr1;
int ** ptr2;
ptr1 = &val;
ptr2 = &ptr1;
printf ("tamanho do ponteiro normal: %d \ n", sizeof (ptr1));
printf ("tamanho do ponteiro duplo: %d \ n", sizeof (ptr2));
retornar 0;
Estamos usando a variável “Val”Com o valor 36 neste código. Então apontamos um ponteiro (ptr1) na direção do Val, que é direcionado na direção de um segundo ponteiro (ptr2) após. O tamanho de ambos os ponteiros é calculado, que é idêntico, eu.e. 8.
Saída
O que ** faz na linguagem C?
Existem várias funções de Ponteiros duplos que são mencionados aqui:
1: Acesso à memória dinâmica
A característica de Ponteiros duplos (**) é o que permite que o idioma C configure e acesse a memória dinâmica. Para fazer isso, um ponteiro recebe um endereço que corresponde ao primeiro elemento de uma matriz. O Ponteiro duplo (**) Em seguida, aponta para este ponteiro, permitindo que os dados neste local sejam lidos ou escritos. À medida que o programa é executado, mais elementos podem ser adicionados à matriz usando um Ponteiro duplo (**).
2: Defina uma matriz de ponteiro
Outro uso para Ponteiros duplos (**) é definir uma variedade de indicadores. Isso é útil quando o programa precisa acessar grandes quantidades de dados sem se preocupar com o tamanho da matriz. A Ponteiro duplo (**) pode acessar rapidamente o endereço desses indicadores, permitindo que o programa processe os dados sem o problema de redimensionar a matriz cada vez que um valor é alterado.
3: Acesso ao local do endereço da memória
No nível mais básico, o Ponteiro duplo (**) simplesmente dá acesso ao programador ao endereço de um determinado local de memória. Com este endereço, o programador pode acessar todos os dados armazenados nesse local ou modificar esses dados conforme necessário. Para fazer isso, o programador simplesmente desreferências Ponteiro duplo (**), o que é feito usando o caractere asterisk (*). Por causa do Ponteiro duplo (**), O programador agora pode acessar e alterar dados de maneiras que não eram antes viáveis.
4: Crie estruturas de dados complexas
Além disso, a Ponteiro duplo (**) também pode ser usado para criar estruturas de dados mais complexas, como árvores e gráficos. Nós, que podem apontar para um ou vários nós adicionais e compõem uma estrutura mais sofisticada em árvores e gráficos. Para criar uma estrutura tão complexa, o programador deve definir novamente um Ponteiro duplo (**) Isso aponta para os nós na estrutura de dados. O Ponteiro duplo (**) permite que o programador acesse e modifique os nós na estrutura de uma maneira que não seria possível sem o Ponteiro duplo (**).
Conclusão
Ponteiros duplos (**) são uma parte poderosa da linguagem C, permitindo que os programas trabalhem com grandes volumes de dados e memória dinâmica. Eles fornecem o endereço de uma peça de dados para facilitar o acesso e mantêm os dois níveis de endereço ao longo da passagem de dados. Utilizando Ponteiros duplos (**), Um programa de idiomas C pode processar rapidamente grandes quantidades de dados sem a necessidade de redimensionar a matriz a cada vez.