O que ** faz no idioma C?

O que ** faz no idioma C?
** referido como um Ponteiro duplo Também conhecido como indiretivo indiretamente ponteiro ou duplo é um recurso de idioma C usado para operar em vários níveis de memória de uma só vez. É útil olhar para a estrutura de memória do idioma C para compreender como funciona.

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.