Olá, seja bem-vindo de volta.
Nesta aula, quero falar sobre o modificador const e como
o usamos com ponteiros.
Aprendemos sobre palestras anteriores constantes.
Significa apenas que você não pode alterar o valor de uma variável. Mas o que significa quando o aplicamos a um ponteiro?
Portanto, quando usamos o modificador const em uma variável ou
array, ele informa ao compilador que o conteúdo do array de variáveis não será alterado pelo programa.
A alternativa era criar instruções define pelo pré-processador, mas const
é geralmente a melhor maneira mais eficiente de fazê-lo.
Com ponteiros, temos que considerar duas coisas ao usar um modificador const.
Estamos realmente dizendo que o ponteiro não pode ser alterado?
Ou estamos dizendo que o valor para o qual o ponteiro aponta não pode ser alterado?
Porque lembre-se de que um ponteiro contém o valor de um endereço.
E podemos não querer mudar esse endereço nunca.
Ou podemos não querer alterar o valor para o qual o ponto está apontando.
Em ambos os casos, temos que ser específicos em nossa sintaxe.
Portanto, você pode usar a palavra-chave const ao declarar um ponteiro para indicar que o valor
apontado não deve ser alterado.
A maneira como você fornece isso e novamente para que
o ponteiro seja um valor, pois um valor tem um endereço.
O que está apontando é o valor desse endereço.
Se você quiser que isso não mude, você
faria algo assim.
Você diria que ao declarar o ponteiro, você colocaria o asterisco
no modificador de constante antes do tipo.
Portanto, você diria constante seja qual for o tipo de seu ponteiro de asterisco.
Portanto, isso é realmente deformado ao definir um ponteiro
para uma constante.
Não poderemos mudar 999l.
Portanto, declaramos que o valor apontado pelo pvalue é constante.
O compilador verificará as instruções que tentam modificar o valor apontado pelo pvalue.
E se houver algum amigo que faça isso no programa, ele vai gerar um erro.
Portanto, esta é a sintaxe. Novamente, o que você deseja
observar aqui é que const é a
primeira palavra e está antes do tipo. Isso quer dizer que o valor que aponta
não pode mudar.
Então, se você tentar fazer algo assim em pvalue, você tenta atribuir
um valor ao que está apontando, porque você vê o
operador de indireção ali. Isso significa que estamos atribuindo um
valor para o que estamos apontando. Se tentarmos fazer
isso, ocorrerá um erro porque não podemos alterar
esse valor, não podemos alterar 999l para 888l.
Agora, que tal ponteiros para constantes.
E na declaração anterior, criamos o ponteiro
para o qual o ponto está apontando não pode ser alterado.
Mas ainda podemos alterar o valor real da variável que declaramos.
Portanto, ainda seríamos capazes de alterar o valor de longo prazo.
Não podemos alterar o valor p da estrela.
Mas o valor longo não é definido como uma constante, ele apenas é definido como um valor longo.
Portanto, ainda podemos modificar o ponteiro de valor inteiro
porque ele não tinha uma constante aplicada.
Aplicamos apenas constante ao ponteiro. Portanto, podemos dizer que o valor é igual a 777l.
O valor apontado mudou, mas você não usou o ponteiro para fazer a mudança.
O próprio ponteiro também não é uma constante.
O ponteiro lembrar contém um endereço.
Não declaramos o ponteiro como uma constante. Então, ainda podemos mudar
Consideramos constante o que o ponteiro está apontando. isso. Se declararmos uma nova variável chamada número, podemos dizer que
o valor p é igual ao endereço desse número.
Isso está perfeitamente bem porque estamos alterando o endereço do valor do ponteiro.
Não estamos alterando o valor para o qual o ponteiro estava apontando.
Portanto, entenda essa distinção, alterando o valor do
ponteiro, que é apenas
um endereço, ou alterando para onde o ponteiro está apontando.
Se você não quiser mudar para onde
o ponteiro está apontando, const deve ser a primeira palavra-chave na declaração do próprio ponteiro.
Portanto, novamente, neste exemplo, vamos alterar o endereço armazenado no valor p para apontar para um número.
Ainda não podemos usar o ponteiro para alterar o valor armazenado porque ele foi
declarado, pois não podemos alterar esse valor.
Você pode alterar o endereço armazenado no ponteiro o quanto quiser, assim como fizemos.
Usar o ponteiro para alterar o valor apontado não é
permitido, mesmo depois de alterar o endereço armazenado no ponteiro.
Portanto, embora tenhamos mudado para
um número longo, o ponteiro ainda tinha constante como palavra-chave.
Portanto, não podemos alterar o valor, não importa para onde o ponteiro esteja apontando.
Que tal não permitir que o endereço do ponteiro
mude, o valor que está no ponteiro.
Portanto, você também pode querer garantir que o endereço armazenado no ponteiro não possa ser alterado.
Você pode fazer isso usando a palavra-chave constant na
declaração do ponteiro da mesma maneira, mas é um pouco diferente.
Em vez de ter const como a primeira palavra-chave,
você a coloca após o tipo de dados e após o asterisco.
Isso significa que o próprio ponteiro não pode alterar seu valor.
Se você colocá-lo antes do int, estará dizendo que o valor apontado pelo ponteiro não pode mudar.
Portanto, ao fazer isso, o ponteiro sempre aponta para a mesma coisa.
O endereço nunca mudará.
O compilador verificará se você
não tentou inverter para alterar o ponteiro em outro lugar no código.
Você não pode alterar este endereço.
Portanto, se você tentar dizer p contagem igual a item, obterá um erro.
Porque isso só pode apontar para o endereço de contagem.
É tudo uma questão de onde você coloca a palavra-chave constante se quiser alterar.
Se você não quiser que o ponteiro mude ou se não
quiser que o endereço do ponteiro mude.
Constante como a primeira palavra-chave não permite que o valor dos ponteiros que apontam para seja alterado.
Se você colocar a constante após o tipo de dados na estrela, isso significa
que o endereço do ponteiro não pode mudar.
Isso é muito para levar e muito confuso, então estude o que eu acabei de dizer.
Entenda essa sintaxe, é muito importante
e muito complicada. Pode ser muito fácil cometer
esse erro. Então entenda a diferença.
Você ainda pode alterar o
valor que p contagem aponta para usando p contagem, assim como poderíamos no anterior. Como a contagem p é, embora não possamos atribuir
um novo endereço, ainda podemos
alterar o valor que está apontando.
Portanto, podemos retirá-lo de referência e alterá-lo dessa forma. Podemos dizer que a contagem de estrelas p é igual a 345, tudo bem.
Faz referência ao valor armazenado em contagem por meio do ponteiro e altera o valor para 345.
Você pode criar um ponteiro constante que aponta para um valor que também
é uma constante, então você poderia fazer algo assim, constante em
estrela, item constante p.
E isso quer dizer que o valor para o qual o valor
está apontando é constante e o próprio ponteiro é uma constante.
Portanto, p item é um ponteiro constante para uma constante, então tudo é fixo.
Você não pode alterar o endereço armazenado no item p e você não pode
usar o item p para modificar o que ele aponta.
No entanto, você ainda pode alterar o item.
O item não é uma constante, então você pode alterar o item.
Você pode alterar o valor diretamente.
Se você quisesse ter certeza de que nada foi alterado, você também
teria que criar a variável int do item como uma constante.
E então isso diria que nunca vai mudar.
Mas lembre-se da diferença aqui entre
ponteiros constantes e valores constantes para os quais o ponteiro está apontando.
Você pode usar ambos. Você pode usar um ou outro.
Se você quiser garantir que
tudo seja constante, certifique-se de que o que você está apontando para essa variável também seja constante. Obrigada.