Dominando ponteiros constantes e ponteiros para constantes em C
Em C, um ponteiro é uma variável que armazena o endereço de memória de outra variável e a palavra-chave const é usado para definir uma variável ou ponteiro cujo valor não pode ser alterado depois de inicializado. Quando combinamos ponteiros com const palavra-chave, podemos controlar duas coisas -
- Se o endereço armazenado no ponteiro pode mudar.
- Se o valor armazenado nesse endereço pode mudar.
Neste capítulo, veremos as três variações principais de ponteiros constantes -
- Ponteiro Constante
- Ponteiro para Constante
- Ponteiro constante para constante
Ponteiro Constante
Um ponteiro constante significa que o ponteiro em si é constante. Uma vez inicializado para apontar para um local de memória, ele não pode apontar para um local diferente, mas o valor armazenado nesse local ainda pode ser alterado.
A seguir está a sintaxe de um ponteiro constante -
06
Nesta sintaxe, data_type é o tipo de dados para o qual o ponteiro aponta, *const torna o próprio ponteiro constante, pointer_name é o nome do ponteiro e &variable atribui a ele o endereço de memória de uma variável.
Exemplo de ponteiro constante
Neste exemplo, declaramos um ponteiro constante ptr e inicialize-o com o endereço da variável x . Então, alteramos o valor de x usando ptr e imprimimos seu valor.
15
Abaixo é mostrada a saída do programa acima, que mostra que o ponteiro permanece fixo em x , mas o valor de x pode ser atualizado.
23Exemplo de erro de ponteiro constante
Aqui está um exemplo onde declaramos um ponteiro constante ptr e inicialize-o com o endereço da variável x . Em seguida, tentamos fazer com que aponte para o endereço da variável y . Isso gerará umerro porque um ponteiro constante não pode apontar para outro local de memória depois de inicializado.
37
Você pode ver o erro abaixo , indicando que não podemos alterar o endereço de um ponteiro constante.
45Ponteiro para Constante
Um ponteiro para constante significa que o valor para o qual ele aponta não pode ser alterado, mas o próprio ponteiro pode apontar para diferentes endereços de memória (ou variáveis).
A seguir está a sintaxe do ponteiro para constante -
53
Nesta sintaxe, const data_type ou data_type const significa que o ponteiro aponta para um valor constante, nome_do_ponteiro é o nome do ponteiro e &variable atribui a ele o endereço de uma variável.
Exemplo de ponteiro para constante
Neste exemplo, declaramos um ponteiro ptr que aponta para um valor constante e atribui a ele o endereço da variável a . Então, fazemos o ponteiro apontar para um endereço diferente da variável b e imprima seu valor.
66
A seguir está a saída do programa acima, mostrando o mesmo ponteiro apontando para variáveis diferentes.
78Exemplo de um ponteiro para erro constante
Aqui está um exemplo onde declaramos um ponteiro para a constante ptr e inicialize-o com o endereço da variável a . Então, tentamos alterar o valor de a através do ponteiro. Isso gerará um erro porque um ponteiro para constante não permite modificar o valor para o qual aponta.
85
Abaixo você pode ver o resultado , que mostra um erro indicando que não podemos modificar o valor através de um ponteiro para constante.
95Ponteiro Constante para Constante
Um ponteiro constante para uma constante é um ponteiro que não pode alterar seu endereço de memória e o valor armazenado nesse endereço de memória também não pode ser alterado. Ambas as ações são restritas, portanto só podemos ler o valor, nada mais.
A seguir está a sintaxe de um ponteiro constante para uma constante -
102
Nesta sintaxe −
- const data_type indica que o valor no local da memória não pode ser alterado através do ponteiro.
- *const pointer_name significa que o ponteiro em si não pode apontar para nenhum outro endereço de memória após a inicialização.
- &variável atribui o ponteiro ao endereço de memória da variável.
Exemplo de ponteiro constante para constante
Neste exemplo, declaramos um ponteiro constante para a constante ptr e atribua a ele o endereço de memória da variável a . Em seguida, imprimimos o valor de a usando o ponteiro.
119
A seguir está a saída do programa acima -
125Exemplo de ponteiro constante para erro constante
Neste exemplo, declaramos um ponteiro constante para constante ptr e inicialize-o com uma variável a . Então, tentamos modificar o valor através do ponteiro e também tentamos fazer o ponteiro apontar para outra variável. Ambas as operações não são permitidas e resultarão em um erro do compilador .
139
Abaixo você pode ver o resultado mostrando os erros -
141Diferença entre tipos de ponteiros constantes
A tabela a seguir mostra as diferenças entre um ponteiro constante, um ponteiro para constante e um ponteiro constante para constante.
Variação Definição É possível alterar o endereço? É possível alterar o valor? Exemplo de Sintaxe Constant PointerUm ponteiro cujo endereço é fixo, mas o valor nesse endereço pode ser modificado.NoYes154Ponteiro para ConstantUm ponteiro que pode apontar para endereços diferentes, mas não pode modificar o valor no local apontado.YesNo161Ponteiro Constante para ConstantUm ponteiro cujo endereço é fixo e o valor nesse endereço não pode ser modificado.NoNo174Conclusão
Neste capítulo, abordamos ponteiros constantes e ponteiros para constantes em C. Ponteiros constantes corrija o endereço, mas permita alterar o valor, ponteiros para constante permitem alterar o endereço, mas não o valor, e ponteiros constantes para constantes restringir ambos.
Inicialização fácil de array de ponteiros em C:dicas e práticas recomendadas Dominando ponteiros e matrizes multidimensionais em C
Linguagem C