Ponteiros são variáveis que armazenam endereços de memória e permitem a manipulação de variáveis e estruturas de dados de forma indireta. O documento discute definição, declaração e operadores de ponteiros, bem como seu uso em expressões, matrizes e strings.
2. Sumário
• Definição de ponteiros
• Porque utilizá-los?
• Declarando uma variável como ponteiro
• Operadores de ponteiros – Operadores
• Operadores de ponteiros: Resumo
• Operadores de ponteiros – Exemplo
• Expressões com ponteiros: Atribuição
• Expressões com ponteiros – Na memória
• Expressões com ponteiros: Aritmética
• Expressões com ponteiros: Aritmética
(continuação):
• Expressões com ponteiros: Comparação
• Expressões com ponteiros: Exemplo
• Ponteiros e Matrizes
• Ponteiros e Matrizes: Exemplo sem ponteiros
• Ponteiros e Matrizes: Exemplo com ponteiros
• Ponteiros e Matrizes: Endereço e conteúdo
• Ponteiros e Matrizes: Ponteiro constante
• Ponteiros e Matrizes: Ponteiro flutuante
• Ponteiros e Matrizes: Ponteiros para matrizes
• Ponteiros e Strings
• Ponteiros e Strings: Exemplo 01
• Ponteiros e strings: Funções de manipulação
• Ponteiros e Strings: Exemplo 02
05/07/2023 Professor Paulo Nunes 2
3. Definição de ponteiros
• Representação simbólica de um endereço de memória.
• Um ponteiro é um tipo especial de variável que armazena endereços.
• Tipos:
• Constantes: um endereço
• Variáveis: local para armazenar o endereço.
05/07/2023 Professor Paulo Nunes 3
4. Porque utilizá-los?
• Fornecem maneiras com as quais as funções podem realmente
modificar os argumentos que recebem;
• Permitem a passagem de matrizes e “strings” de forma mais precisa
de uma função para outra;
• Permitem uma melhor manipulação de matrizes;
• Para a criação de estruturas de dados complexas como listas
encadeadas e árvores binárias;
• Compilam mais rapidamente, o que torna o código mais eficiente.
05/07/2023 Professor Paulo Nunes 4
5. Declarando uma variável como ponteiro
• A declaração dever ser na forma:
tipo *variável;
• Onde:
• tipo: é um tipo de variável válido em C;
• *: identificador de ponteiro;
• variável: nome de variável válido em C.
• Exemplo:
int *a;
• As variáveis ponteiro devem sempre apontar para o tipo de dado
correto.
05/07/2023 Professor Paulo Nunes 5
6. Operadores de ponteiros - Operadores
• Existem dois operadores unários para manipulação de ponteiros:
• & devolve o endereço de memória de uma variável.
Por exemplo:
a = &endereco;
Armazena em “a” o endereço de memória da variável “endereço”. Diz-se “O
endereço de...”.
• * é o complemento de &, que devolve o valor da variável localizada no endereço
que o segue.
Por exemplo:
q = *a;
Armazena em “q” o conteúdo de “endereço”. Diz-se “No endereço de ...”.
05/07/2023 Professor Paulo Nunes 6
7. Operadores de ponteiros: Resumo
• Nome do ponteiro: retorno o endereço apontado pelo mesmo.
• &: junto ao nome do ponteiro, retorna o endereço do ponteiro.
• Exemplo: int *p; printf(“%u”,&p);
• *: junto ao nome do ponteiro, retorna o conteúdo da variável apontada pelo
mesmo.
• Exemplo: int x = 2; *p = x; printf(“%d”,*p);
05/07/2023 Professor Paulo Nunes 7
8. Operadores de ponteiros - Exemplo
05/07/2023 Professor Paulo Nunes 8
Declaração de variável
ponteiro
Variável “a” recebe o
endereço da variável
“endereço”.
Variável “q” recebe o
conteúdo da variável
“endereco”.
9. Expressões com ponteiros: Atribuição
05/07/2023 Professor Paulo Nunes 9
“q” aponta para
o endereço de
“x”.
“p” recebe o
conteúdo de
“q”.
será impresso o endereço de
“x”, pois ambos, “p” e “q”
apontam para ele.
10. Expressões com ponteiros – Na memória
Variável Conteúdo Aponta Endereço
x 5 2686732
y 10 2686728
p 2686732 5 2686724
q 2686728 10 2686720
05/07/2023 Professor Paulo Nunes 10
11. Expressões com ponteiros: Aritmética
• Duas operações apenas: Adição e Subtração.
• São incrementados e decrementados de acordo com o tipo base.
05/07/2023 Professor Paulo Nunes 11
12. Expressões com ponteiros: Aritmética
(continuação):
• A cada incremento, o ponteiro aponta para a próxima posição de memória do
elemento de seu mesmo tipo, ocorrendo o mesmo no decremento.
• Tipos float e double não podem ser adicionados ou subtraídos a ponteiros.
05/07/2023 Professor Paulo Nunes 12
13. Expressões com ponteiros: Comparação
• Utilizam-se os operadores (=, !=, >=, <=, > e <) para comparações entre
ponteiros.
• Os operandos devem ambos ser do tipo ponteiro.
• As variáveis apontadas pelos ponteiros devem ser do mesmo tipo.
05/07/2023 Professor Paulo Nunes 13
15. Ponteiros e Matrizes
• Matrizes, após a compilação, são transformadas em ponteiros.
• Operações com índices de matrizes podem ser feitas com ponteiros.
• O nome de uma matriz é um endereço, portanto um ponteiro.
• Acessam a memória de maneira idêntica.
05/07/2023 Professor Paulo Nunes 15
18. Ponteiros e Matrizes: Endereço e conteúdo
• O que significa a expressão *(nums + d) na matriz com ponteiros?
• A expressão acessa o endereço do elemento de índice d da matriz
nums.
• *(matriz + índice) matriz[linha]
• Um endereço de um elemento de uma matriz pode ser referenciado
das seguintes formas:
• nums + d ou &nums[d].
• Exemplo:
05/07/2023 Professor Paulo Nunes 18
19. Ponteiros e Matrizes: Ponteiro constante
05/07/2023 Professor Paulo Nunes 19
“notas” é o endereço
da matriz “notas[]”,
não podendo ser
variado.
Diretiva de pré-
processador. Define
um valor como
constante.
20. Ponteiros e Matrizes: Ponteiro flutuante
05/07/2023 Professor Paulo Nunes 20
Aponta para uma matriz do
tipo float, incrementando 4
bytes a cada operação.
21. Ponteiros e Matrizes: Ponteiros para
matrizes
05/07/2023 Professor Paulo Nunes 21
Função que adiciona um
valor aos elementos da
matriz.
Chamada da função
passando o endereço da
matriz como argumento.
Cria um ponteiro
variável
22. Ponteiros e Strings
• Matriz unidimensional de caracteres que termina em nulo ‘0’.
• Constantes string são uma lista de caracteres entre aspas.
• Exemplo: “Escreva aqui”
• O caractere nulo é adicionado ao final da string automaticamente
pelo compilador.
• Para funções de manipulação de string, utiliza-se a biblioteca
STRING.H.
05/07/2023 Professor Paulo Nunes 22
23. Ponteiros e Strings: Exemplo 01
05/07/2023 Professor Paulo Nunes 23
Quando a função não for inteira,
deve ser declarada em main().
Retorna o ponteiro informando a
posição do caractere na frase.
24. Ponteiros e strings: Funções de
manipulação
• Estas são algumas das funções para manipulação de strings em C:
• strcpy(string1,string2) : copia string2 em string1.
• strcat(string1,string2): concatena string2 no final de string1.
• strlen(string): retorna o tamanho de string.
• strcmp(string1,string2): retorna 0 se string1 e string2 iguais, < 0 se string1 <
string2 e > 0 se string1 > string2.
• strchr(string,ch): retorna um ponteiro para a primeira ocorrência de ch em
string.
• strstr(string1,string2): retorna um ponteiro para a primeira ocorrência de
string2 em string1.
05/07/2023 Professor Paulo Nunes 24
25. Ponteiros e Strings: Exemplo 02
05/07/2023 Professor Paulo Nunes 25
Retorna o
tamanho de str1.
Retorna o
tamanho de str2.
Verifica se as
strings são iguais.
Concatena str2
ao final de str1.
Copia str2 em
str1.
Aponta para a primeira
ocorrência de ‘O’ em “Ola”.
Aponta para a primeira ocorrência
de ‘Ola’ em “Ola aqui”.
27. Referências bibliográficas
• Kerninghan, Brian W. The C Programming Language. Second Ed.
Includes index. (C Computer Program Language). I. Ritchie, Dennis M.
Prentice Hall, 1978.
• Mizrahi, Victorine Viviane. Treinamento em Linguagem C – Módulo 2.
McGraw-Hill, Ltda. 1990.
• Schildt, Herbert. C: The complete reference. 3ª Ed. Pearson, 1997.
05/07/2023 Professor Paulo Nunes 27