Nesta aula vamos iniciar um novo módulo em nosso Curso de Programação C, vamos começar a aprender sobre ponteiros. O que é e como criar um ponteiro na linguagem C.
Vamos à primeira pergunta: o que é um ponteiro?
Basicamente um ponteiro é uma variável qua guarda um endereço de memória, ou seja, um ponteiro, também chamado de apontador, possui como conteúdo o endereço de memória de outra variável. A princípio isso pode não fazer muito sentido, mas veremos mais a frente como este recurso é poderoso.
Respondendo a segunda pergunta: na linguagem C, basta utilizarmos um asterisco (*) à esquerda do identificador (nome) da variável para dizer que ela é um ponteiro.
Vamos a alguns exemplos para facilitar a compreensão.
No trecho de código a seguir temos uma variável do tipo int e um ponteiro para um int. A variável num armazena um número inteiro (10). Contudo, a variável p, que é um ponteiro para um inteiro (observe o * à esquerda), armazena um endereço de memória. Assim, a variável p aceita apenas endereços de memória e qualquer outra atribuição irá gerar um erro ao tentar compilar.
Para imprimir o conteúdo apontado por um ponteiro, basta utilizarmos o nome da variável com o asterisco, como feito na última linha, e será impresso o número 10. Perceba que 10 não é o valor da variável p. A variável p possui o endereço da variável num e o valor da variável num é 10.
int *p, num = 10; p = 10; // atribuição inválida p = # // atribuição válida printf("Valor apontado por p: %d\n", *p);
No trecho de código a seguir temos uma variável do tipo char e um ponteiro para um char. A variável letra armazena um caracter ( f ). Contudo, a variável p, que é um ponteiro para um char (observe o * à esquerda), armazena um endereço de memória. Assim, a variável p aceita apenas endereços de memória e qualquer outra atribuição irá gerar um erro ao tentar compilar.
A última linha irá imprimir na tela o a letra f, que é o conteúdo apontado pela variável p.
char *p, letra = 'f'; p = 'a'; // atribuição inválida p = &letra; // atribuição válida printf("Valor apontado por p: %c\n", *p);
Podemos criar ponteiros para qualquer tipo de dado, inclusive novos tipos criados com typedef struct, mas lembre-se, uma variável ponteiro aceita apenas endereços de memória.
Código em C com um exemplo de criação e utilização de ponteiros.
*/ Aula 184: O que é e como criar um ponteiro? Código escrito por Wagner Gaspar Maior de 2021 */ int main(){ char letra = 'f'; char *p; p = &letra; printf("Valor de letra: %c\n", letra); printf("Endereco de letra: %p\n", &letra); printf("Valor de p: %p\n", p); printf("Endereco de p: %p\n", &p); printf("Valor apontado por p: %c\n", *p); return 0; }