0% acharam este documento útil (0 voto)
33 visualizações24 páginas

Ponteiros - Parte 2

O documento descreve o uso de ponteiros com vetores e matrizes em C. Quando se declara um vetor ou matriz, na verdade está se declarando um ponteiro como vetor ou matriz. Exemplos mostram como ler strings e números utilizando ponteiros para percorrer os elementos.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
33 visualizações24 páginas

Ponteiros - Parte 2

O documento descreve o uso de ponteiros com vetores e matrizes em C. Quando se declara um vetor ou matriz, na verdade está se declarando um ponteiro como vetor ou matriz. Exemplos mostram como ler strings e números utilizando ponteiros para percorrer os elementos.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 24

PONTEIROS – Parte 2

Programação II
Engenharia Elétrica
Prof. Nivaldo T. Schiefler Jr. - DSc
Ponteiros

Vetor e Matriz com ponteiros

Quando se declara um vetor ou uma matriz, na realidade, está


se declarando um ponteiro como vetor ou matriz.

Ex: char frase[10] = “Boa noite”;

int vetor[5] = {0,1,2,3,4};

int matriz[2][2] = { { 2,3} ,{4,5}};


2
Ponteiros

Vetores com ponteiros


Ponteiros

Vetores com ponteiros – Exemplo → Lendo uma string

char palavra[11] = "Boa noite";


char *PX;

int main()
{
PX = palavra;

while(*PX != '\0')
{
printf("%c",*PX);
PX++;
}

return 0;
}
Ponteiros

Vetores com ponteiros – Exemplo → Lendo uma string

char palavra[11] = "Boa noite"; char palavra[11] = "Boa noite";


char *PX; char *PX;

int main() int main()


{ { while(*PX)
PX = palavra; OU PX = palavra; até encontrar o ‘\0’

while(*PX != '\0') while(*PX)


{ {
printf("%c",*PX); printf("%c",*PX);
PX++; PX++;
} }
return 0;
} return 0;
}
Ponteiros

Vetores com ponteiros – Exemplo → Lendo uma string

simplificado
char palavra[11] = "Boa noite";
char *PX;

int main()
{
PX = palavra;

while(*PX)
printf("%c",*PX++);

return 0;
}
Ponteiros

Exemplo:

char frase[50]; char frase[50];


char *str; char *str;
int main() int main()
{ {
str = frase; str = frase;
printf("\n\tDigite uma frase: "); printf("\n\tDigite uma frase: ");
gets(str); gets(str);
printf("\n\tFoi digitado: "); printf("\n\tFoi digitado: ");
while(*str) while(*str)
printf("%c",*str++); printf("%c",(*str)++);
return 0; return 0;
} }
O que acontece ser for

(*str)++ ???

7
Ponteiros

char frase[50]; char frase[50];


char *str; char *str;
int main() int main()
{ {
str = frase; str = frase;
printf("\n\tDigite uma frase: "); printf("\n\tDigite uma frase: ");
gets(str); gets(str);
printf("\n\tFoi digitado: "); printf("\n\tFoi digitado: ");
while(*str) while(*str)
printf("%c",*str++); printf("%c",(*str)++);
return 0; return 0;
} }
c
Incrementa do valor do ponteiro
Não lê o conteúdo original

8
Ponteiros

EXERCÍCIO – Criar um programa que leia uma frase, via teclado pelo comando GETS().
Após a leitura da frase, deve ser escolhida uma letra qualquer. Esta letra será a base de
comparação para a contagem de letras desta frase.

O resultado final será a quantidade de letras existente neste vetor. Desenvolva a rotina
para ir lendo as posições da STRING digitada e comparando, utilizando os ponteiros para
esta STRING. Retorne pela função a quantidade de letras encontradas.

Use ponteiro em todo o código.


Ponteiros

EXERCÍCIO – Criar uma função que compara duas strings e retorne


ZERO se forem iguais e UM se forem diferentes.

Utilize os ponteiros para ler as STRINGS e comparar.


Ponteiros

Vetor com números:


#include <stdio.h>
#include <stdlib.h>
int vetor[ ] = {1,2,3,4,5,6,7,8,9,10};
int vetor[20] = {1,2,3,4,5,6,7,8,9,10};

int *ptr;

int main()
{
printf("\n\tVetor Ponteiro");

ptr = vetor;
printf("\n\n\t");
while(*ptr)
printf("%d ", *ptr++);
return 0;
}
Ponteiros

Vetor com números:

int vetor[ ] = {1,2,3,4,5,6,7,8,9,10};

Crie uma função que passe o vetor como ponteiro e retorne dois ponteiros
com somente os valores pares e impares. Retorne um ponteiro de vetor
par e outro impar.
Ponteiros
Matrizes
A declaração de uma matriz é feita normalmente:

Ex: int matriz[3][2];

Neste caso 3 linhas e 2 colunas

Sempre indicando o tipo e o tamanho das linhas e colunas

Ou ainda

#define linhas 3
#define colunas 2

int matriz[linhas ][colunas ];

13
Ponteiros

Exemplo: //***************************************
Em PRGI, foi visto // Mostra matriz
#define linhas 3
desta maneira. //**************************************
#define colunas 2
for(i = 0; i < linhas; i++)
int matriz[linhas][colunas]; {
int i, j, cont; for(j = 0; j < colunas; j++)
printf("\t%d",matriz[i][j]);
int main() printf("\n");
{ }
cont = 0; //**************************************
//***********************************
// Cria matriz de dados return 0;
//*********************************** }
for(i = 0; i < linhas; i++)
for(j = 0; j < colunas; j++)
matriz[i][j] = cont++;

14
Ponteiros
Matriz com ponteiros

#define linhas 3 //***************************************


#define colunas 2 // Mostra matriz
//***************************************
int matriz[linhas][colunas]; printf("\n\n");
int *p1,cont,i,j; cont = 0;
for(i = 0; i < linhas; i++)
int main() {
{ for(j = 0; j < colunas; j++)
p1 = matriz; printf("\t%d", p1[cont++]);
for(cont = 0; cont < linhas*colunas; cont++) printf("\n");
{ }
*p1 = cont; //***************************************
printf("\t%d", *p1);
p1++; return 0;
} } Deu certo?
// a impressão será um do lado do outro
// para colocar no formato anterior, use os
// 2 comandos de FOR
15
Ponteiros
Matriz com ponteiros

#define linhas 3 //***************************************


#define colunas 2 // Mostra matriz
//***************************************
int matriz[linhas][colunas]; printf("\n\n");
Neste caso o ponteiro P1 não está
int *p1,cont,i,j; na posição correta cont = 0;
for(i = 0; i < linhas; i++)
int main() {
{ for(j = 0; j < colunas; j++)
p1 = matriz; printf("\t%d", p1[cont++]);
for(cont = 0; cont < linhas*colunas; cont++) printf("\n");
{ }
*p1 = cont; //***************************************
printf("\t%d", *p1);
p1++; return 0;
} }
// a impressão será um do lado do outro
// para colocar no formato anterior, use os
// 2 comandos de FOR
16
Ponteiros
Matriz com ponteiros

Neste caso tem que colocar o ponteiro na posição correta.

Foi feito um apontamento para a matriz e o ponteiro foi sendo incrementado para colocar
os valores.

Tem que determinar onde está o primeiro elemento da matriz.

Matriz[0][0]

printf("\n\n");
printf("\n\t%p\n\n",&matriz[0][0]); // achar endereço

17
Ponteiros
Matriz com ponteiros

End 0
Colocando o endereço inicial no ponteiro – opção 1

//************************************ printf("\n\n");
// Mostra matriz printf("\n\t%p\n\n", &matriz[0][0]);
//************************************ // achar endereço pelo printf
printf("\n\n"); p1 = 0x0040505C; // end encontrado
cont = 0; cont = 0;
for(i = 0; i < linhas; i++) for(i = 0; i < linhas; i++)
{ {
for(j = 0; j < colunas; j++) for(j = 0; j < colunas; j++)
printf("\t%d", p1[cont++]); printf("\t%d", p1[cont++]);
printf("\n"); printf("\n");
} }
//************************************ return 0;
}
Nesta opção, se deve encontrar o endereço
e colocar no ponteiro.
18
Ponteiros
Matriz com ponteiros

Colocando automaticamente – opção 2


O & retorna o end.

//**************************************
p1 = &matriz[0][0];
// Mostra matriz
cont = 0;
//**************************************
for(i = 0; i < linhas; i++)
printf("\n\n");
{
Cont = 0;
for(j = 0; j < colunas; j++)
for(i = 0; i < linhas; i++)
printf("\t%d", p1[cont++]);
{
printf("\n");
for(j = 0; j < colunas; j++)
}
printf("\t%d", p1[cont++]);
return 0;
printf("\n");
}
}
//**************************************

printf("\n\n");

19
Ponteiros
Matriz com ponteiros

Colocando automaticamente – opção 3

//***************************************
p1 = p1 – linhas* colunas;
// Mostra matriz
cont = 0;
//***************************************
for(i = 0; i < linhas; i++)
printf("\n\n");
{
cont = 0;
for(j = 0; j < colunas; j++)
for(i = 0; i < linhas; i++)
printf("\t%d", p1[cont++]);
{
printf("\n");
for(j = 0; j < colunas; j++)
}
printf("\t%d", p1[cont++]);
return 0;
printf("\n");
}
}
//**************************************

printf("\n\n");

20
Ponteiros
Matriz com ponteiros

Colocando automaticamente – opção 3

//***************************************
p1 = p1 – linhas* colunas;
// Mostra matriz Ponteiro
cont = 0;
//***************************************
for(i = 0; i < linhas; i++) incrementando
printf("\n\n");
{
cont = 0;
for(j = 0; j < colunas; j++)
for(i = 0; i < linhas; i++)
printf("\t%d", p1[cont++]);
{
printf("\n");
for(j = 0; j < colunas; j++)
}
printf("\t%d", p1[cont++]);
return 0;
printf("\n");
}
}
//**************************************

printf("\n\n");

21
Ponteiros
Matriz com ponteiros

Colocando automaticamente – opção 3

//***************************************
p1 = p1 – linhas* colunas;
// Mostra matriz
cont = 0;
//***************************************
for(i = 0; i < linhas; i++)
printf("\n\n");
{
cont = 0;
for(j = 0; j < colunas; j++)
for(i = 0; i < linhas; i++)
{
{
printf("\t%d", *p1);
for(j = 0; j < colunas; j++)
p1++;
printf("\t%d", p1[cont++]);
}
printf("\n"); Ponteiro printf("\n");
} incrementando }
//**************************************
return 0;
}
printf("\n\n");

22
Ponteiros
Matriz com ponteiros

Colocando automaticamente – opção 3

//***************************************
p1 = p1 – linhas* colunas;
// Mostra matriz
cont = 0;
//***************************************
for(i = 0; i < linhas; i++)
printf("\n\n");
{
cont = 0; Ponteiro for(j = 0; j < colunas; j++)
for(i = 0; i < linhas; i++) incrementando printf("\t%d", *p1++);
{
printf("\n");
for(j = 0; j < colunas; j++)
}
printf("\t%d", p1[cont++]);
return 0;
printf("\n");
}
}
//**************************************

printf("\n\n"); Neste caso pela, precedência, o * tem


preferência do ++

23
Ponteiros
Operadores Associatividade
Matriz com ponteiros
() [] -> . esquerda para a direita
! - ++ -- * & (cast) sizeof direita para a esquerda
Colocando automaticamente – opção 3
*/% esquerda para a direita
+- esquerda para a direita
//***************************************
<< //
>> Mostra matriz esquerda para a direita p1 = p1 – linhas* colunas;
cont = 0;
//***************************************
< <= > >= esquerda para a direita
for(i = 0; i < linhas; i++)
== !=printf("\n\n"); esquerda para a direita {
cont = 0;
& esquerda para a direita for(j = 0; j < colunas; j++)
for(i = 0; i < linhas; i++)
^ esquerda para a direita
Ponteiro printf("\t%d", *p1++);
{
printf("\n");
| for(j = 0; j < colunas; j++)incrementando
esquerda para a direita
}
&& printf("\t%d", p1[cont++]);
esquerda para a direita return 0;
printf("\n");
|| esquerda para a direita }
}
?: direita para a esquerda
//**************************************
= += -= *= /= %= &= ^= |=
<<=printf("\n\n");
>>= Neste caso pela,
direita precedência,
para a esquerda o * tem
, preferência
esquerda para ado ++
direita

24

Você também pode gostar