Sei sulla pagina 1di 86

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros
M arcio Moretto Ribeiro marciomr@usp.br
Escola de Artes Ci encias e Humanidades USP

19 de Mar co de 2013

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Slides

Slides dispon veis em: https://www.dropbox.com/sh/nca1h0iu8doc41p/PDgUeYiVIe

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Resumo da aula

Endere cos e ponteiros. Arrays e aritm etica com endere cos. Strings. Matrizes. Arrays de ponteiros (argc e argv).

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Resumo da aula

Endere cos e ponteiros. Arrays e aritm etica com endere cos. Strings. Matrizes. Arrays de ponteiros (argc e argv).

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Resumo da aula

Endere cos e ponteiros. Arrays e aritm etica com endere cos. Strings. Matrizes. Arrays de ponteiros (argc e argv).

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Resumo da aula

Endere cos e ponteiros. Arrays e aritm etica com endere cos. Strings. Matrizes. Arrays de ponteiros (argc e argv).

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Resumo da aula

Endere cos e ponteiros. Arrays e aritm etica com endere cos. Strings. Matrizes. Arrays de ponteiros (argc e argv).

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Endere co de uma vari avel

int a ; Quando declaramos uma vari avel, e reservado um espa co de mem oria de tamanho adequado (tamanho de um inteiro neste caso). As vezes eu til saber o endere co desse espa co de mem oria. Em C acessamos esse valor usando o s mbolo & antes do nome da vari avel.

& a ; /* endereco de a */

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Endere co de uma vari avel

int a ; Quando declaramos uma vari avel, e reservado um espa co de mem oria de tamanho adequado (tamanho de um inteiro neste caso). As vezes eu til saber o endere co desse espa co de mem oria. Em C acessamos esse valor usando o s mbolo & antes do nome da vari avel.

& a ; /* endereco de a */

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

Pergunta: Qual e o tipo de &a?


1 2

int a ; int b = & a ; > gcc ponteiros.c ponteiros.c: Na fun c~ ao main: ponteiros.c:7:5: warning: assignment makes integer from pointer without a cast [habilitado por padr~ ao]

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

Pergunta: Qual e o tipo de &a?


1 2

int a ; int b = & a ; > gcc ponteiros.c ponteiros.c: Na fun c~ ao main: ponteiros.c:7:5: warning: assignment makes integer from pointer without a cast [habilitado por padr~ ao]

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

Pergunta: Qual e o tipo de &a?


1 2

int a ; printf ( " % d \ n " , & a ); > gcc ponteiros.c ponteiros.c: Na fun c~ ao main: ponteiros.c:7:3: warning: format %d espera argumento do tipo int, por em o argumento 2 possui tipo int * [-Wformat]

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

Pergunta: Qual e o tipo de &a?


1 2

int a ; printf ( " % d \ n " , & a ); > gcc ponteiros.c ponteiros.c: Na fun c~ ao main: ponteiros.c:7:3: warning: format %d espera argumento do tipo int, por em o argumento 2 possui tipo int * [-Wformat]

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

1 2 3

int a ; int * b ; b = &a; b e um ponteiro para int que aponta para a vari avel a.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

1 2 3

int a ; int * b ; b = &a; b e um ponteiro para int que aponta para a vari avel a.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros
1 2 3 4 5 6

int a ; int * b ; b = &a; * b = 4; printf ( " % d \ n " , * b ); printf ( " % d \ n " , a );

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros
int a ; int * b ; b = &a; * b = 4; printf ( " % d \ n " , * b ); printf ( " % d \ n " , a ); A linha 5 altera o conte udo do local apontado por b. > a.out 4 4

1 2 3 4 5 6

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros
int a ; int * b ; b = &a; * b = 4; printf ( " % d \ n " , * b ); printf ( " % d \ n " , a ); A linha 5 altera o conte udo do local apontado por b. > a.out 4 4

1 2 3 4 5 6

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

1 2

int a = 42; printf ( " % d \ n " , *& a ); > a.out 42

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

1 2

int a = 42; printf ( " % d \ n " , *& a ); > a.out 42

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

1 2

int a ; printf ( " % p \ n " , & a ); > gcc ponteiros.c > a.out 0x7fff01e090fc

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros

1 2

int a ; printf ( " % p \ n " , & a ); > gcc ponteiros.c > a.out 0x7fff01e090fc

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

printf (cont.)

%c %d %u %ld %f %lf %p %x %s %%

caracteres (char). inteiros decimais com sinal (int). inteiros decimais sem sinal (unsigned int). inteiros longos (long). n umeros com ponto utuante (float). n umeros com ponto utuante de dupla precis ao (double). ponteiros (int*, double*, float* etc.). inteiros em hexadecimal. string. imprime o s bolo %

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros e Argumentos de Fun co es


1 2 3 4 5 6 7 8 9 10 11

void troca ( int x , int y ){ int tmp = x ; x = y; y = tmp ; } main (){ int n = 4; int m = 5; troca (n , m ); printf ( " n =% d m =% d \ n " , n , m ); } n=4 m=5

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros e Argumentos de Fun co es


1 2 3 4 5 6 7 8 9 10 11

void troca ( int x , int y ){ int tmp = x ; x = y; y = tmp ; } main (){ int n = 4; int m = 5; troca (n , m ); printf ( " n =% d m =% d \ n " , n , m ); } n=4 m=5

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros e Argumentos de Fun co es


1 2 3 4 5 6 7 8 9 10 11

void troca ( int *x , int * y ){ int tmp = * x ; *x = *y; * y = tmp ; } main (){ int n = 4; int m = 5; troca (& n ,& m ); printf ( " n =% d m =% d \ n " , n , m ); } n=5 m=4

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros e Argumentos de Fun co es


1 2 3 4 5 6 7 8 9 10 11

void troca ( int *x , int * y ){ int tmp = * x ; *x = *y; * y = tmp ; } main (){ int n = 4; int m = 5; troca (& n ,& m ); printf ( " n =% d m =% d \ n " , n , m ); } n=5 m=4

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros e Argumentos de Fun co es


1 2 3 4 5 6 7 8 9 10 11

void troca ( int *x , int * y ){ int tmp = * x ; *x = *y; * y = tmp ; } main (){ int n = 4; int m = 5; troca (& n ,& m ); printf ( " n =% d m =% d \ n " , n , m ); } n=5 m=4

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros e Argumentos de Fun co es


1 2 3 4 5 6 7 8 9 10 11

void troca ( int *x , int * y ){ int tmp = * x ; *x = *y; * y = tmp ; } main (){ int n = 4; int m = 5; troca (& n ,& m ); printf ( " n =% d m =% d \ n " , n , m ); } n=5 m=4

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Ponteiros e Argumentos de Fun co es

Exerc cio 1: Escreva uma fun c ao que receba os coecientes de uma equa c ao de segundo grau e calcula suas raizes.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays (vetores)
1 2 3 4 5 6 7 8 9

# define MAX 3 main (){ int i ; int a [ MAX ]; a [0] = 1; a [1] = 4; a [2] = 2; for ( i = 0; i < 3; i ++) printf ( " % d \ n " , a [ i ]); } 1 4 2

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays (vetores)
1 2 3 4 5 6 7 8 9

# define MAX 3 main (){ int i ; int a [ MAX ]; a [0] = 1; a [1] = 4; a [2] = 2; for ( i = 0; i < 3; i ++) printf ( " % d \ n " , a [ i ]); } 1 4 2

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays (vetores)
main (){ int i ; int a [] = {1 ,4 ,2}; for ( i = 0; i < 3; i ++) printf ( " % d \ n " , a [ i ]); } 1 4 2

1 2 3 4 5 6 7

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays (vetores)
main (){ int i ; int a [] = {1 ,4 ,2}; for ( i = 0; i < 3; i ++) printf ( " % d \ n " , a [ i ]); } 1 4 2

1 2 3 4 5 6 7

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays

Quando declaramos um array de inteiros de tamanho MAX

(int a[MAX]), e reservada uma por c ao cont gua da mem oria de MAX vezes o tamanho de um int.
Quando declaramos int a[] = {1,4,2}, e reservado um

espa co suciente para inicializar o array com os valores entre chaves (no caso 3 vezes o tamanho de um int).
Para acessar (alterar) o i- esimo valor desse array usamos a

sintaxe (a[i]).
M arcio M. Ribeiro Aula 3 EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays

Quando declaramos um array de inteiros de tamanho MAX

(int a[MAX]), e reservada uma por c ao cont gua da mem oria de MAX vezes o tamanho de um int.
Quando declaramos int a[] = {1,4,2}, e reservado um

espa co suciente para inicializar o array com os valores entre chaves (no caso 3 vezes o tamanho de um int).
Para acessar (alterar) o i- esimo valor desse array usamos a

sintaxe (a[i]).
M arcio M. Ribeiro Aula 3 EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays

Quando declaramos um array de inteiros de tamanho MAX

(int a[MAX]), e reservada uma por c ao cont gua da mem oria de MAX vezes o tamanho de um int.
Quando declaramos int a[] = {1,4,2}, e reservado um

espa co suciente para inicializar o array com os valores entre chaves (no caso 3 vezes o tamanho de um int).
Para acessar (alterar) o i- esimo valor desse array usamos a

sintaxe (a[i]).
M arcio M. Ribeiro Aula 3 EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays e ponteiros

1 2 3

int a [10]; int * pa ; pa = & a [0]; pa aponta para a[0].

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays e ponteiros
O que signica a seguinte express ao?
1

*( pa + 1); pa + 1 e o endere co do pr oximo inteiro i.e. pa + 1 e o endere co de a[1]. De forma mais geral, pa + i e o endere co de a[i].

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays e ponteiros
O que signica a seguinte express ao?
1

*( pa + 1); pa + 1 e o endere co do pr oximo inteiro i.e. pa + 1 e o endere co de a[1]. De forma mais geral, pa + i e o endere co de a[i].

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays e ponteiros
O que signica a seguinte express ao?
1

*( pa + 1); pa + 1 e o endere co do pr oximo inteiro i.e. pa + 1 e o endere co de a[1]. De forma mais geral, pa + i e o endere co de a[i].

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays e ponteiros
O que signica a seguinte express ao?
1

*( pa + 1); pa + 1 e o endere co do pr oximo inteiro i.e. pa + 1 e o endere co de a[1]. De forma mais geral, pa + i e o endere co de a[i].

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays e ponteiros

Note que em C o nome do array indica seu endere co inicial i.e. quando declaramos int a[MAX] temos que a e o mesmo que &a[0]. Logo, a express ao a[i] nada mais e do que uma abrevia c ao para *(a + i).

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays e ponteiros

Note que em C o nome do array indica seu endere co inicial i.e. quando declaramos int a[MAX] temos que a e o mesmo que &a[0]. Logo, a express ao a[i] nada mais e do que uma abrevia c ao para *(a + i).

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Aritim etica com Endere cos


Adi c ao: como j a vimos, se pa e um ponteiro para int, pa +

i e o endere co do i- esimo inteiro depois de pa.


Compara c ao: se p e q apontam para membros de um vetor

ent ao podemos comparar qual vem antes ou depois no vetor usando os s mbolos <, >, <=, >=, == e !=.
Subtra c ao: se p e q apontam para membros de um vetor

ent ao podemos subtra -los para saber a dist ancia entre eles.
1 2

int a [10]; printf ( " % ld \ n " , & a [8] - & a [3]); 5

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Aritim etica com Endere cos


Adi c ao: como j a vimos, se pa e um ponteiro para int, pa +

i e o endere co do i- esimo inteiro depois de pa.


Compara c ao: se p e q apontam para membros de um vetor

ent ao podemos comparar qual vem antes ou depois no vetor usando os s mbolos <, >, <=, >=, == e !=.
Subtra c ao: se p e q apontam para membros de um vetor

ent ao podemos subtra -los para saber a dist ancia entre eles.
1 2

int a [10]; printf ( " % ld \ n " , & a [8] - & a [3]); 5

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Aritim etica com Endere cos


Adi c ao: como j a vimos, se pa e um ponteiro para int, pa +

i e o endere co do i- esimo inteiro depois de pa.


Compara c ao: se p e q apontam para membros de um vetor

ent ao podemos comparar qual vem antes ou depois no vetor usando os s mbolos <, >, <=, >=, == e !=.
Subtra c ao: se p e q apontam para membros de um vetor

ent ao podemos subtra -los para saber a dist ancia entre eles.
1 2

int a [10]; printf ( " % ld \ n " , & a [8] - & a [3]); 5

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Aritim etica com Endere cos


Adi c ao: como j a vimos, se pa e um ponteiro para int, pa +

i e o endere co do i- esimo inteiro depois de pa.


Compara c ao: se p e q apontam para membros de um vetor

ent ao podemos comparar qual vem antes ou depois no vetor usando os s mbolos <, >, <=, >=, == e !=.
Subtra c ao: se p e q apontam para membros de um vetor

ent ao podemos subtra -los para saber a dist ancia entre eles.
1 2

int a [10]; printf ( " % ld \ n " , & a [8] - & a [3]); 5

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Aritim etica com Endere cos


Adi c ao: como j a vimos, se pa e um ponteiro para int, pa +

i e o endere co do i- esimo inteiro depois de pa.


Compara c ao: se p e q apontam para membros de um vetor

ent ao podemos comparar qual vem antes ou depois no vetor usando os s mbolos <, >, <=, >=, == e !=.
Subtra c ao: se p e q apontam para membros de um vetor

ent ao podemos subtra -los para saber a dist ancia entre eles.
1 2

int a [10]; printf ( " % ld \ n " , & a [8] - & a [3]); 5

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Strings
Uma cadeia de caracteres da forma "Ola C!" e um array de caracteres (char) terminada por um caracter nulo (\0).
1 2 3 4 5 6

int i ; char * a = " java " ; for ( i = 0; a [ i ] != \0 ; i ++) printf ( " % c " , a [ i ]); printf ( " \ n " ); java

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Strings
Uma cadeia de caracteres da forma "Ola C!" e um array de caracteres (char) terminada por um caracter nulo (\0).
1 2 3 4 5 6

int i ; char * a = " java " ; for ( i = 0; a [ i ] != \0 ; i ++) printf ( " % c " , a [ i ]); printf ( " \ n " ); java

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Strings
Uma cadeia de caracteres da forma "Ola C!" e um array de caracteres (char) terminada por um caracter nulo (\0).
1 2 3 4 5 6

int i ; char a [] = " java " ; for ( i = 0; a [ i ] != \0 ; i ++) printf ( " % c " , a [ i ]); printf ( " \ n " ); java

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Strings

Na segunda vers ao, a e um array de caracteres de tamanho 5.


1 2 3 4

char a [] = " java " ; a [2] = c ; printf ( " % s \ n " , a ); jaca

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Strings

Na primeira vers ao, a e um ponteiro para a cadeia constante de caracteres.


1 2 3 4

char * a = " java " ; a [2] = c ; printf ( " % s \ n " , a ); Falha de segmenta c~ ao (imagem do n ucleo gravada)

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcpy
strcpy(t,s) e uma fun c ao da biblioteca string.h que copia uma cadeia de caracteres s em uma cadeia de caracteres t:
1 2 3 4 5 6 7 8 9

# include < stdio .h > # include < string .h > # define MAX 20 main (){ char a [] = " java " ; char b [ MAX ]; strcpy (b , a ); printf ( " % s \ n % s \ n " , a , b ); } java java

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcpy
strcpy(t,s) e uma fun c ao da biblioteca string.h que copia uma cadeia de caracteres s em uma cadeia de caracteres t:
1 2 3 4 5 6 7 8 9

# include < stdio .h > # include < string .h > # define MAX 20 main (){ char a [] = " java " ; char b [ MAX ]; strcpy (b , a ); printf ( " % s \ n % s \ n " , a , b ); } java java

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcpy (vers ao 1)

Implementa c ao do strcpy usando arrays.


1 2 3 4 5 6

void strcpy ( char *s , char * t ){ int i = 0; while (( s [ i ] = t [ i ]) != \0 ) i ++; }

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcpy (vers ao 2)

Vers ao com ponteiros no lugar do array.


1 2 3 4 5 6

void strcpy ( char *s , char * t ){ while ((* s = * t ) != \0 ){ s ++; t ++; } }

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcpy (vers ao 3)

O operador *s++ primeiro retorna o valor de *s e depois incrementa.


1 2 3

void strcpy ( char *s , char * t ){ while ((* s ++ = * t ++) != \0 ); }

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcpy (vers ao 4)

O s mbolo \0 e o caracter nulo.


1 2 3

void strcpy ( char *s , char * t ){ while (* s ++ = * t ++); }

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcmp

strcmp(s,t) e uma fun c ao da biblioteca string.h que compara duas strings s e t.


strcmp(s,t) retorna 0 se t for igual a s. strcmp(s,t) retorna um inteiro negativo se s vier antes de t

na ordem alfab etica.


strcmp(s,t) retorna um inteiro positivo se s vier depois de t

na ordem alfab etica.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcmp
1 2 3 4 5 6 7 8 9 10 11

# include < stdio .h > # include < string .h > main (){ char * a = " java " ; char * b = " jaca " ; if ( strcmp (a , b ) < 0) /* a < b */ printf ( " % s \ t % s \ n " , a , b ); else if (! strcmp (a , b )) /* a = b */ printf ( " % s \ n " , a ); else /* a > b */ printf ( " % s \ t % s \ n " , b , a ); } jaca java
EACH

M arcio M. Ribeiro Aula 3

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcmp
1 2 3 4 5 6 7 8 9 10 11

# include < stdio .h > # include < string .h > main (){ char * a = " java " ; char * b = " jaca " ; if ( strcmp (a , b ) < 0) /* a < b */ printf ( " % s \ t % s \ n " , a , b ); else if (! strcmp (a , b )) /* a = b */ printf ( " % s \ n " , a ); else /* a > b */ printf ( " % s \ t % s \ n " , b , a ); } jaca java
EACH

M arcio M. Ribeiro Aula 3

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcmp (vers ao 1)

Implementa c ao de strcmp usando arrays:


1 2 3 4 5 6 7

int strcmp ( char *s , char * t ){ int i ; for ( i = 0; s [ i ] == t [ i ]; i ++) if ( s [ i ] == \0 ) return 0; return s [ i ] - t [ i ]; }

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

strcmp (vers ao 2)

Vers ao de strcmp usando ponteiros.


1 2 3 4 5 6

int strcmp ( char *s , char * t ){ for (; * s == * t ; s ++ , t ++) if (* s == \0 ) return 0; return * s - * t ; }

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Matrizes
Matrizes nada mais s ao do que arrays bidimensionais.
1 2 3 4 5 6 7 8 9 10

main (){ int l , c ; int a [2][3]; a [0][0] = 1; a [0][1] = 4; a [0][2] = 2; a [1][0] = 4; a [1][1] = 2; a [1][2] = 1; for ( l = 0; l < 2; l ++){ for ( c = 0; c < 3; c ++) printf ( " % d " , a [ l ][ c ]); printf ( " \ n " ); } } 1 4 2 4 2 1

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Matrizes
Matrizes nada mais s ao do que arrays bidimensionais.
1 2 3 4 5 6 7 8 9 10

main (){ int l , c ; int a [2][3]; a [0][0] = 1; a [0][1] = 4; a [0][2] = 2; a [1][0] = 4; a [1][1] = 2; a [1][2] = 1; for ( l = 0; l < 2; l ++){ for ( c = 0; c < 3; c ++) printf ( " % d " , a [ l ][ c ]); printf ( " \ n " ); } } 1 4 2 4 2 1

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Matrizes

A declar c ao int a[2][3] reserva um espa co de mem oria de tamanho 2 3 vezes o tamanho de um int.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Matrizes

A declar c ao int a[2][3] reserva um espa co de mem oria de tamanho 2 3 vezes o tamanho de um int.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays de Ponteiros
1

int * a [6]; A declara c ao acima reserva um array com seis ponteiros para int.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays de Ponteiros
1

int * a [6]; A declara c ao acima reserva um array com seis ponteiros para int.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

argc e argv

argc e argv s ao par ametros que podem ser passados para a

fun c ao main.
argc cont em o n umero de par ametros passados na linha de

comando (o pr oprio nome do comando aqui e considerado um par ametro).


argv e um array de ponteiros de tamanho (argc) que aponta

para strings contendo os par ametros.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

argc e argv

argc e argv s ao par ametros que podem ser passados para a

fun c ao main.
argc cont em o n umero de par ametros passados na linha de

comando (o pr oprio nome do comando aqui e considerado um par ametro).


argv e um array de ponteiros de tamanho (argc) que aponta

para strings contendo os par ametros.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

argc e argv

argc e argv s ao par ametros que podem ser passados para a

fun c ao main.
argc cont em o n umero de par ametros passados na linha de

comando (o pr oprio nome do comando aqui e considerado um par ametro).


argv e um array de ponteiros de tamanho (argc) que aponta

para strings contendo os par ametros.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

argc e argv

1 2 3 4 5

main ( int argc , char * argv []){ printf ( " % d \ n " , argc ); printf ( " % s \ n " , argv [0]); printf ( " % s \ n " , argv [1]); } > a.out 42 a.out 42

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

argc e argv

1 2 3 4 5

main ( int argc , char * argv []){ printf ( " % d \ n " , argc ); printf ( " % s \ n " , argv [0]); printf ( " % s \ n " , argv [1]); } > a.out 42 a.out 42

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

echo

echo e um programa que imprime (ecoa) seus argumentos: > echo 42 4 2 42 4 2

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

echo

echo e um programa que imprime (ecoa) seus argumentos: > echo 42 4 2 42 4 2

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

echo
1 2 3 4 5 6 7 8 9

main ( int argc , char * argv []){ int i ; for ( i = 1; i < argc ; i ++){ printf ( " % s " , argv [ i ]); if ( i < argc - 1) printf ( " " ); } printf ( " \ n " ); } > a.out 42 4 2 a.out 42 4 2

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

echo
1 2 3 4 5 6 7 8 9

main ( int argc , char * argv []){ int i ; for ( i = 1; i < argc ; i ++){ printf ( " % s " , argv [ i ]); if ( i < argc - 1) printf ( " " ); } printf ( " \ n " ); } > a.out 42 4 2 a.out 42 4 2

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

echo (vers ao 2)

1 2 3 4 5

main ( int argc , char * argv []){ while ( - - argc > 0) printf (( argc > 1) ? " % s " : " % s " , *++ argv ); printf ( " \ n " ); }

> a.out 42 4 2 a.out 42 4 2

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

echo (vers ao 2)

1 2 3 4 5

main ( int argc , char * argv []){ while ( - - argc > 0) printf (( argc > 1) ? " % s " : " % s " , *++ argv ); printf ( " \ n " ); }

> a.out 42 4 2 a.out 42 4 2

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays de Ponteiros vs Matrizes


1 2

char * mes [] = { " jan " , " fev " , " mar " , " abr " , " mai " , " jun " , " jul " , " ago " , " set " , " out " , " nov " , " dez " };

A declara c ao acima inicializa um array de ponteiros para strings.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Arrays de Ponteiros vs Matrizes

1 2

char mes [][3] = { " jan " , " fev " , " mar " , " abr " , " mai " , " jun " , " jul " , " ago " , " set " , " out " , " nov " , " dez " };

A declara c ao acima inicializa uma matriz de chars de tamanho 4.

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Jogo da velha
Exerc cio 2: Escrever um jogo da velha.
>jogador 1: 1 1 o x - o - - >jogador 2: 1 1 jogada invalida! >jogador 2: 1 2 o x - o x - - >jogador 1: 2 2 o x - o x - - o jogador 1 venceu!

M arcio M. Ribeiro Aula 3

EACH

Endere cos e Ponteiros

Arrays e aritm etica com endere cos

Strings

Matrizes

Arrays de Ponteiros

Pr oxima Aula

Estruturas (struct) e aloca c ao din amica.

M arcio M. Ribeiro Aula 3

EACH

Potrebbero piacerti anche