ponteiro const em C
Ponteiros constantes
Um ponteiro constante em C não pode alterar o endereço da variável para a qual está apontando, ou seja, o endereço permanecerá constante. Portanto, podemos dizer que se um ponteiro constante aponta para alguma variável, então ele não pode apontar para nenhuma outra variável.
Sintaxe do ponteiro constante
*const ;
A declaração de um ponteiro constante é fornecida abaixo:
int *const ptr;
Vamos entender o ponteiro constante através de um exemplo.
#include int main() { int a=1; int b=2; int *const ptr; ptr=&a; ptr=&b; printf('Value of ptr is :%d',*ptr); return 0; } No código acima:
- Declaramos duas variáveis, ou seja, aeb com valores 1 e 2, respectivamente.
- Declaramos um ponteiro constante.
- Primeiro, atribuímos o endereço da variável 'a' ao ponteiro 'ptr'.
- Em seguida, atribuímos o endereço da variável 'b' ao ponteiro 'ptr'.
- Por último, tentamos imprimir o valor da variável apontada pelo 'ptr'.
Saída
Na saída acima, podemos observar que o código acima produz o erro 'atribuição de variável somente leitura'ptr''. Isso significa que o valor da variável 'ptr' que 'ptr' contém não pode ser alterado. No código acima, estamos alterando o valor de 'ptr' de &a para &b, o que não é possível com ponteiros constantes. Portanto, podemos dizer que o ponteiro constante, que aponta para alguma variável, não pode apontar para outra variável.
Ponteiro para Constante
Um ponteiro para constante é um ponteiro através do qual o valor da variável que o ponteiro aponta não pode ser alterado. O endereço desses ponteiros pode ser alterado, mas o valor da variável que o ponteiro aponta não pode ser alterado.
Sintaxe do ponteiro para constante
const *
A declaração de um ponteiro para constante é fornecida abaixo:
const int* ptr;
Vamos entender através de um exemplo.
#include int main() { int a=100; int b=200; const int* ptr; ptr=&a; ptr=&b; printf('Value of ptr is :%u',ptr); return 0; } No código acima:
- Declaramos duas variáveis, ou seja, aeb com os valores 100 e 200 respectivamente.
- Declaramos um ponteiro para constante.
- Primeiro, atribuímos o endereço da variável 'a' ao ponteiro 'ptr'.
- Em seguida, atribuímos o endereço da variável 'b' ao ponteiro 'ptr'.
- Por último, tentamos imprimir o valor de 'ptr'.
Saída
O código acima é executado com sucesso e mostra o valor de ‘ptr’ na saída.
- Agora, escrevemos o código no qual alteramos o valor da variável para a qual o ponteiro aponta.
#include int main() { int a=100; int b=200; const int* ptr; ptr=&b; *ptr=300; printf('Value of ptr is :%d',*ptr); return 0; } No código acima:
- Declaramos duas variáveis, ou seja, 'a' e 'b' com os valores 100 e 200 respectivamente.
- Declaramos um ponteiro para constante.
- Atribuímos o endereço da variável 'b' ao ponteiro 'ptr'.
- Em seguida, tentamos modificar o valor da variável ‘b’ através do ponteiro ‘ptr’.
- Por último, tentamos imprimir o valor da variável que é apontada pelo ponteiro 'ptr'.
Saída
O código acima mostra o erro 'atribuição de local somente leitura '*ptr''. Este erro significa que não podemos alterar o valor da variável para a qual o ponteiro está apontando.
Ponteiro Constante para uma Constante
Um ponteiro constante para uma constante é um ponteiro, que é uma combinação dos dois ponteiros acima. Não pode alterar o endereço da variável para a qual está apontando nem pode alterar o valor colocado neste endereço.
Sintaxe
const * const ;
A declaração para um ponteiro constante para uma constante é fornecida abaixo:
const int* const ptr;
Vamos entender através de um exemplo.
#include int main() { int a=10; int b=90; const int* const ptr=&a; *ptr=12; ptr=&b; printf('Value of ptr is :%d',*ptr); return 0; } No código acima:
- Declaramos duas variáveis, ou seja, 'a' e 'b' com os valores 10 e 90, respectivamente.
- Declaramos um ponteiro constante para uma constante e então atribuímos o endereço de 'a'.
- Tentamos alterar o valor da variável ‘a’ através do ponteiro ‘ptr’.
- Então tentamos atribuir o endereço da variável 'b' ao ponteiro 'ptr'.
- Por último, imprimimos o valor da variável, que é apontada pelo ponteiro 'ptr'.
Saída
O código acima mostra o erro 'atribuição de local somente leitura '*ptr'' e 'atribuição de variável somente leitura 'ptr''. Portanto, concluímos que o ponteiro constante para uma constante não pode alterar o endereço nem o valor apontado por este ponteiro.