Você está na página 1de 27

Algoritmos e Programação I

Linguagem de Programação C
Ponteiros
Sumário
• Definição de ponteiros • Ponteiros e Matrizes
• Porque utilizá-los? • Ponteiros e Matrizes: Exemplo sem ponteiros
• Declarando uma variável como ponteiro
• Ponteiros e Matrizes: Exemplo com ponteiros
• Operadores de ponteiros – Operadores
• Ponteiros e Matrizes: Endereço e conteúdo
• Operadores de ponteiros: Resumo
• Operadores de ponteiros – Exemplo
• Ponteiros e Matrizes: Ponteiro constante
• Expressões com ponteiros: Atribuição • Ponteiros e Matrizes: Ponteiro flutuante
• Expressões com ponteiros – Na memória • Ponteiros e Matrizes: Ponteiros para matrizes
• Expressões com ponteiros: Aritmética • Ponteiros e Strings
• Expressões com ponteiros: Aritmética • Ponteiros e Strings: Exemplo 01
(continuação):
• Ponteiros e strings: Funções de manipulação
• Expressões com ponteiros: Comparação
• Expressões com ponteiros: Exemplo • Ponteiros e Strings: Exemplo 02

05/07/2023 Professor Paulo Nunes 2


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


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


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


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
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


Operadores de ponteiros - Exemplo
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”.

05/07/2023 Professor Paulo Nunes 8


Expressões com ponteiros: Atribuição

“q” aponta
para o “p” recebe o
endereço de será impresso o endereço de
conteúdo de
“x”. “x”, pois ambos, “p” e “q”
“q”.
apontam para ele.

05/07/2023 Professor Paulo Nunes 9


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


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


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


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


Expressões com ponteiros: Exemplo

05/07/2023 Professor Paulo Nunes 14


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


Ponteiros e Matrizes: Exemplo sem ponteiros

05/07/2023 Professor Paulo Nunes 16


Ponteiros e Matrizes: Exemplo com ponteiros

05/07/2023 Professor Paulo Nunes 17


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


Ponteiros e Matrizes: Ponteiro constante

“notas” é o endereço
Diretiva de pré-
da matriz “notas[]”,
processador. Define
não podendo ser
um valor como
variado.
constante.

05/07/2023 Professor Paulo Nunes 19


Ponteiros e Matrizes: Ponteiro flutuante

Aponta para uma matriz do


tipo float, incrementando 4
bytes a cada operação.

05/07/2023 Professor Paulo Nunes 20


Ponteiros e Matrizes: Ponteiros para matrizes
Chamada da função
passando o endereço da
matriz como argumento.

Função que adiciona um


valor aos elementos da
matriz. Cria um ponteiro
variável

05/07/2023 Professor Paulo Nunes 21


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


Ponteiros e Strings: Exemplo 01
Quando a função não for inteira,
deve ser declarada em main().

Retorna o ponteiro informando a


posição do caractere na frase.

05/07/2023 Professor Paulo Nunes 23


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


Ponteiros e Strings: Exemplo 02

Retorna o Retorna o
Verifica se as tamanho de
tamanho
str1. de str2.
Concatena
stringsstr2
são iguais.
ao final de str1.
Copia str2 em
str1.
Aponta para a primeira
Aponta para
ocorrência a primeira
de ‘O’ ocorrência
em “Ola”.
de ‘Ola’ em “Ola aqui”.

05/07/2023 Professor Paulo Nunes 25


O professor

05/07/2023 Professor Paulo Nunes 26


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

Você também pode gostar