aula 3 - linguagem c
DESCRIPTION
Aula sobre a linguagem CTRANSCRIPT
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
Marcio Moretto [email protected]
Escola de Artes Ciencias e HumanidadesUSP
19 de Marco de 2013
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Slides
Slides disponveis em:https://www.dropbox.com/sh/nca1h0iu8doc41p/PDgUeYiVIe
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Resumo da aula
Enderecos e ponteiros. Arrays e aritmetica com enderecos. Strings. Matrizes. Arrays de ponteiros (argc e argv).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Resumo da aula
Enderecos e ponteiros. Arrays e aritmetica com enderecos. Strings. Matrizes. Arrays de ponteiros (argc e argv).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Resumo da aula
Enderecos e ponteiros. Arrays e aritmetica com enderecos. Strings. Matrizes. Arrays de ponteiros (argc e argv).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Resumo da aula
Enderecos e ponteiros. Arrays e aritmetica com enderecos. Strings. Matrizes. Arrays de ponteiros (argc e argv).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Resumo da aula
Enderecos e ponteiros. Arrays e aritmetica com enderecos. Strings. Matrizes. Arrays de ponteiros (argc e argv).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Endereco de uma variavel
1 int a;
Quando declaramos uma variavel, e reservado um espaco dememoria de tamanho adequado (tamanho de um inteiro nestecaso).As vezes e util saber o endereco desse espaco de memoria. Em Cacessamos esse valor usando o smbolo & antes do nome davariavel.
1 &a; /* endereco de a */
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Endereco de uma variavel
1 int a;
Quando declaramos uma variavel, e reservado um espaco dememoria de tamanho adequado (tamanho de um inteiro nestecaso).As vezes e util saber o endereco desse espaco de memoria. Em Cacessamos esse valor usando o smbolo & antes do nome davariavel.
1 &a; /* endereco de a */
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
Pergunta: Qual e o tipo de &a?
1 int a;
2 int b = &a;
> gcc ponteiros.c
ponteiros.c: Na func~ao main:
ponteiros.c:7:5: warning: assignment makes
integer from pointer without a cast [habilitado por
padr~ao]
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
Pergunta: Qual e o tipo de &a?
1 int a;
2 int b = &a;
> gcc ponteiros.c
ponteiros.c: Na func~ao main:
ponteiros.c:7:5: warning: assignment makes
integer from pointer without a cast [habilitado por
padr~ao]
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
Pergunta: Qual e o tipo de &a?
1 int a;
2 printf("%d\n", &a);
> gcc ponteiros.c
ponteiros.c: Na func~ao main:
ponteiros.c:7:3: warning: format %d espera
argumento do tipo int, porem o argumento 2 possui
tipo int * [-Wformat]
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
Pergunta: Qual e o tipo de &a?
1 int a;
2 printf("%d\n", &a);
> gcc ponteiros.c
ponteiros.c: Na func~ao main:
ponteiros.c:7:3: warning: format %d espera
argumento do tipo int, porem o argumento 2 possui
tipo int * [-Wformat]
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a;
2 int *b;
3 b = &a;
b e um ponteiro para int que aponta para a variavel a.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a;
2 int *b;
3 b = &a;
b e um ponteiro para int que aponta para a variavel a.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a;
2 int *b;
3 b = &a;
4 *b = 4;
5 printf("%d\n", *b);
6 printf("%d\n", a);
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a;
2 int *b;
3 b = &a;
4 *b = 4;
5 printf("%d\n", *b);
6 printf("%d\n", a);
A linha 5 altera o conteudo do local apontado por b.
> a.out
4
4
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a;
2 int *b;
3 b = &a;
4 *b = 4;
5 printf("%d\n", *b);
6 printf("%d\n", a);
A linha 5 altera o conteudo do local apontado por b.
> a.out
4
4
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a = 42;
2 printf("%d\n", *&a);
> a.out
42
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a = 42;
2 printf("%d\n", *&a);
> a.out
42
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a;
2 printf("%p\n", &a);
> gcc ponteiros.c
> a.out
0x7fff01e090fc
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros
1 int a;
2 printf("%p\n", &a);
> gcc ponteiros.c
> a.out
0x7fff01e090fc
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
printf (cont.)
%c caracteres (char).%d inteiros decimais com sinal (int).%u inteiros decimais sem sinal (unsigned int).%ld inteiros longos (long).%f numeros com ponto flutuante (float).%lf numeros com ponto flutuante de dupla precisao (double).%p ponteiros (int*, double*, float* etc.).%x inteiros em hexadecimal.%s string.%% imprime o sbolo %
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros e Argumentos de Funcoes
1 void troca(int x, int y){
2 int tmp = x;
3 x = y;
4 y = tmp;
5 }
6 main (){
7 int n = 4;
8 int m = 5;
9 troca(n,m);
10 printf("n=%d m=%d\n", n, m);
11 }
n=4 m=5
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros e Argumentos de Funcoes
1 void troca(int x, int y){
2 int tmp = x;
3 x = y;
4 y = tmp;
5 }
6 main (){
7 int n = 4;
8 int m = 5;
9 troca(n,m);
10 printf("n=%d m=%d\n", n, m);
11 }
n=4 m=5
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros e Argumentos de Funcoes
1 void troca(int *x, int *y){
2 int tmp = *x;
3 *x = *y;
4 *y = tmp;
5 }
6 main (){
7 int n = 4;
8 int m = 5;
9 troca (&n,&m);
10 printf("n=%d m=%d\n", n, m);
11 }
n=5 m=4
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros e Argumentos de Funcoes
1 void troca(int *x, int *y){
2 int tmp = *x;
3 *x = *y;
4 *y = tmp;
5 }
6 main (){
7 int n = 4;
8 int m = 5;
9 troca (&n,&m);
10 printf("n=%d m=%d\n", n, m);
11 }
n=5 m=4
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros e Argumentos de Funcoes
1 void troca(int *x, int *y){
2 int tmp = *x;
3 *x = *y;
4 *y = tmp;
5 }
6 main (){
7 int n = 4;
8 int m = 5;
9 troca (&n,&m);
10 printf("n=%d m=%d\n", n, m);
11 }
n=5 m=4
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros e Argumentos de Funcoes
1 void troca(int *x, int *y){
2 int tmp = *x;
3 *x = *y;
4 *y = tmp;
5 }
6 main (){
7 int n = 4;
8 int m = 5;
9 troca (&n,&m);
10 printf("n=%d m=%d\n", n, m);
11 }
n=5 m=4
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Ponteiros e Argumentos de Funcoes
Exerccio 1: Escreva uma funcao que receba os coeficientes deuma equacao de segundo grau e calcula suas raizes.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays (vetores)
1 #define MAX 3
2 main (){
3 int i;
4 int a[MAX];
5 a[0] = 1; a[1] = 4; a[2] = 2;
6
7 for(i = 0; i < 3; i++)
8 printf("%d\n", a[i]);
9 }
1
4
2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays (vetores)
1 #define MAX 3
2 main (){
3 int i;
4 int a[MAX];
5 a[0] = 1; a[1] = 4; a[2] = 2;
6
7 for(i = 0; i < 3; i++)
8 printf("%d\n", a[i]);
9 }
1
4
2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays (vetores)
1 main (){
2 int i;
3 int a[] = {1,4,2};
4
5 for(i = 0; i < 3; i++)
6 printf("%d\n", a[i]);
7 }
1
4
2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays (vetores)
1 main (){
2 int i;
3 int a[] = {1,4,2};
4
5 for(i = 0; i < 3; i++)
6 printf("%d\n", a[i]);
7 }
1
4
2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays
Quando declaramos um array de inteiros de tamanho MAX(int a[MAX]), e reservada uma porcao contgua da memoriade MAX vezes o tamanho de um int.
Quando declaramos int a[] = {1,4,2}, e reservado umespaco suficiente para inicializar o array com os valores entrechaves (no caso 3 vezes o tamanho de um int).
Para acessar (alterar) o i-esimo valor desse array usamos asintaxe (a[i]).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays
Quando declaramos um array de inteiros de tamanho MAX(int a[MAX]), e reservada uma porcao contgua da memoriade MAX vezes o tamanho de um int.
Quando declaramos int a[] = {1,4,2}, e reservado umespaco suficiente para inicializar o array com os valores entrechaves (no caso 3 vezes o tamanho de um int).
Para acessar (alterar) o i-esimo valor desse array usamos asintaxe (a[i]).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays
Quando declaramos um array de inteiros de tamanho MAX(int a[MAX]), e reservada uma porcao contgua da memoriade MAX vezes o tamanho de um int.
Quando declaramos int a[] = {1,4,2}, e reservado umespaco suficiente para inicializar o array com os valores entrechaves (no caso 3 vezes o tamanho de um int).
Para acessar (alterar) o i-esimo valor desse array usamos asintaxe (a[i]).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays e ponteiros
1 int a[10];
2 int *pa;
3 pa = &a[0];
pa aponta para a[0].
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays e ponteiros
O que significa a seguinte expressao?
1 *(pa + 1);
pa + 1 e o endereco do proximo inteiro i.e. pa + 1 e o enderecode a[1].
De forma mais geral, pa + i e o endereco de a[i].
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays e ponteiros
O que significa a seguinte expressao?
1 *(pa + 1);
pa + 1 e o endereco do proximo inteiro i.e. pa + 1 e o enderecode a[1].
De forma mais geral, pa + i e o endereco de a[i].
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays e ponteiros
O que significa a seguinte expressao?
1 *(pa + 1);
pa + 1 e o endereco do proximo inteiro i.e. pa + 1 e o enderecode a[1].
De forma mais geral, pa + i e o endereco de a[i].
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays e ponteiros
O que significa a seguinte expressao?
1 *(pa + 1);
pa + 1 e o endereco do proximo inteiro i.e. pa + 1 e o enderecode a[1].
De forma mais geral, pa + i e o endereco de a[i].
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays e ponteiros
Note que em C o nome do array indica seu endereco inicial i.e.quando declaramos int a[MAX] temos que a e o mesmo que&a[0].
Logo, a expressao a[i] nada mais e do que uma abreviacao para*(a + i).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays e ponteiros
Note que em C o nome do array indica seu endereco inicial i.e.quando declaramos int a[MAX] temos que a e o mesmo que&a[0].
Logo, a expressao a[i] nada mais e do que uma abreviacao para*(a + i).
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Aritimetica com Enderecos
Adicao: como ja vimos, se pa e um ponteiro para int, pa +i e o endereco do i-esimo inteiro depois de pa.
Comparacao: se p e q apontam para membros de um vetorentao podemos comparar qual vem antes ou depois no vetorusando os smbolos , =, == e !=.
Subtracao: se p e q apontam para membros de um vetorentao podemos subtra-los para saber a distancia entre eles.
1 int a[10];
2 printf("%ld\n", &a[8] - &a[3]);
5
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Aritimetica com Enderecos
Adicao: como ja vimos, se pa e um ponteiro para int, pa +i e o endereco do i-esimo inteiro depois de pa.
Comparacao: se p e q apontam para membros de um vetorentao podemos comparar qual vem antes ou depois no vetorusando os smbolos , =, == e !=.
Subtracao: se p e q apontam para membros de um vetorentao podemos subtra-los para saber a distancia entre eles.
1 int a[10];
2 printf("%ld\n", &a[8] - &a[3]);
5
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Aritimetica com Enderecos
Adicao: como ja vimos, se pa e um ponteiro para int, pa +i e o endereco do i-esimo inteiro depois de pa.
Comparacao: se p e q apontam para membros de um vetorentao podemos comparar qual vem antes ou depois no vetorusando os smbolos , =, == e !=.
Subtracao: se p e q apontam para membros de um vetorentao podemos subtra-los para saber a distancia entre eles.
1 int a[10];
2 printf("%ld\n", &a[8] - &a[3]);
5
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Aritimetica com Enderecos
Adicao: como ja vimos, se pa e um ponteiro para int, pa +i e o endereco do i-esimo inteiro depois de pa.
Comparacao: se p e q apontam para membros de um vetorentao podemos comparar qual vem antes ou depois no vetorusando os smbolos , =, == e !=.
Subtracao: se p e q apontam para membros de um vetorentao podemos subtra-los para saber a distancia entre eles.
1 int a[10];
2 printf("%ld\n", &a[8] - &a[3]);
5
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Aritimetica com Enderecos
Adicao: como ja vimos, se pa e um ponteiro para int, pa +i e o endereco do i-esimo inteiro depois de pa.
Comparacao: se p e q apontam para membros de um vetorentao podemos comparar qual vem antes ou depois no vetorusando os smbolos , =, == e !=.
Subtracao: se p e q apontam para membros de um vetorentao podemos subtra-los para saber a distancia entre eles.
1 int a[10];
2 printf("%ld\n", &a[8] - &a[3]);
5
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Strings
Uma cadeia de caracteres da forma "Ola C!" e um array decaracteres (char) terminada por um caracter nulo (\0).
1 int i;
2 char* a = "java";
3
4 for(i = 0; a[i] != \0; i++)
5 printf("%c", a[i]);
6 printf("\n");
java
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Strings
Uma cadeia de caracteres da forma "Ola C!" e um array decaracteres (char) terminada por um caracter nulo (\0).
1 int i;
2 char* a = "java";
3
4 for(i = 0; a[i] != \0; i++)
5 printf("%c", a[i]);
6 printf("\n");
java
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Strings
Uma cadeia de caracteres da forma "Ola C!" e um array decaracteres (char) terminada por um caracter nulo (\0).
1 int i;
2 char a[] = "java";
3
4 for(i = 0; a[i] != \0; i++)
5 printf("%c", a[i]);
6 printf("\n");
java
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Strings
Na segunda versao, a e um array de caracteres de tamanho 5.
1 char a[] = "java";
2
3 a[2] = c;
4 printf("%s\n", a);
jaca
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Strings
Na primeira versao, a e um ponteiro para a cadeia constante decaracteres.
1 char* a = "java";
2
3 a[2] = c;
4 printf("%s\n", a);
Falha de segmentac~ao (imagem do nucleo gravada)
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcpy
strcpy(t,s) e uma funcao da biblioteca string.h que copiauma cadeia de caracteres s em uma cadeia de caracteres t:
1 #include
2 #include
3 #define MAX 20
4 main (){
5 char a[] = "java";
6 char b[MAX];
7 strcpy(b, a);
8 printf("%s\n%s\n", a, b);
9 }
java
java
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcpy
strcpy(t,s) e uma funcao da biblioteca string.h que copiauma cadeia de caracteres s em uma cadeia de caracteres t:
1 #include
2 #include
3 #define MAX 20
4 main (){
5 char a[] = "java";
6 char b[MAX];
7 strcpy(b, a);
8 printf("%s\n%s\n", a, b);
9 }
java
java
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcpy (versao 1)
Implementacao do strcpy usando arrays.
1 void strcpy(char *s, char *t){
2 int i = 0;
3
4 while ((s[i] = t[i]) != \0)
5 i++;
6 }
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcpy (versao 2)
Versao com ponteiros no lugar do array.
1 void strcpy(char *s, char *t){
2 while ((*s = *t) != \0){
3 s++;
4 t++;
5 }
6 }
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcpy (versao 3)
O operador *s++ primeiro retorna o valor de *s e depoisincrementa.
1 void strcpy(char *s, char *t){
2 while ((*s++ = *t++) != \0);
3 }
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcpy (versao 4)
O smbolo \0 e o caracter nulo.1 void strcpy(char *s, char *t){
2 while (*s++ = *t++);
3 }
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcmp
strcmp(s,t) e uma funcao da biblioteca string.h que comparaduas 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 alfabetica.
strcmp(s,t) retorna um inteiro positivo se s vier depois de tna ordem alfabetica.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcmp
1 #include
2 #include
3 main (){
4 char *a = "java"; char *b = "jaca";
5 if (strcmp(a,b) < 0) /* a < b*/
6 printf("%s\t%s\n", a, b);
7 else if (! strcmp(a,b)) /* a = b */
8 printf("%s\n", a);
9 else /* a > b */
10 printf("%s\t%s\n", b, a);
11 }
jaca java
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcmp
1 #include
2 #include
3 main (){
4 char *a = "java"; char *b = "jaca";
5 if (strcmp(a,b) < 0) /* a < b*/
6 printf("%s\t%s\n", a, b);
7 else if (! strcmp(a,b)) /* a = b */
8 printf("%s\n", a);
9 else /* a > b */
10 printf("%s\t%s\n", b, a);
11 }
jaca java
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcmp (versao 1)
Implementacao de strcmp usando arrays:
1 int strcmp(char *s, char *t){
2 int i;
3 for (i = 0; s[i] == t[i]; i++)
4 if (s[i] == \0)
5 return 0;
6 return s[i] - t[i];
7 }
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
strcmp (versao 2)
Versao de strcmp usando ponteiros.
1 int strcmp(char *s, char *t){
2 for (; *s == *t; s++, t++)
3 if (*s == \0)
4 return 0;
5 return *s - *t;
6 }
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Matrizes
Matrizes nada mais sao do que arrays bidimensionais.
1 main (){
2 int l, c; int a[2][3];
3 a[0][0] = 1; a[0][1] = 4; a[0][2] = 2;
4 a[1][0] = 4; a[1][1] = 2; a[1][2] = 1;
5 for(l = 0; l < 2; l++){
6 for(c = 0; c < 3; c++)
7 printf("%d ", a[l][c]);
8 printf("\n");
9 }
10 }
1 4 2
4 2 1
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Matrizes
Matrizes nada mais sao do que arrays bidimensionais.
1 main (){
2 int l, c; int a[2][3];
3 a[0][0] = 1; a[0][1] = 4; a[0][2] = 2;
4 a[1][0] = 4; a[1][1] = 2; a[1][2] = 1;
5 for(l = 0; l < 2; l++){
6 for(c = 0; c < 3; c++)
7 printf("%d ", a[l][c]);
8 printf("\n");
9 }
10 }
1 4 2
4 2 1
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Matrizes
A declarcao int a[2][3] reserva um espaco de memoria detamanho 2 3 vezes o tamanho de um int.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Matrizes
A declarcao int a[2][3] reserva um espaco de memoria detamanho 2 3 vezes o tamanho de um int.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays de Ponteiros
1 int *a[6];
A declaracao acima reserva um array com seis ponteiros para int.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays de Ponteiros
1 int *a[6];
A declaracao acima reserva um array com seis ponteiros para int.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
argc e argv
argc e argv sao parametros que podem ser passados para afuncao main.
argc contem o numero de parametros passados na linha decomando (o proprio nome do comando aqui e considerado umparametro).
argv e um array de ponteiros de tamanho (argc) que apontapara strings contendo os parametros.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
argc e argv
argc e argv sao parametros que podem ser passados para afuncao main.
argc contem o numero de parametros passados na linha decomando (o proprio nome do comando aqui e considerado umparametro).
argv e um array de ponteiros de tamanho (argc) que apontapara strings contendo os parametros.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
argc e argv
argc e argv sao parametros que podem ser passados para afuncao main.
argc contem o numero de parametros passados na linha decomando (o proprio nome do comando aqui e considerado umparametro).
argv e um array de ponteiros de tamanho (argc) que apontapara strings contendo os parametros.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
argc e argv
1 main(int argc , char* argv []){
2 printf("%d\n", argc);
3 printf("%s\n", argv [0]);
4 printf("%s\n", argv [1]);
5 }
> a.out 42
a.out
42
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
argc e argv
1 main(int argc , char* argv []){
2 printf("%d\n", argc);
3 printf("%s\n", argv [0]);
4 printf("%s\n", argv [1]);
5 }
> a.out 42
a.out
42
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
echo
echo e um programa que imprime (ecoa) seus argumentos:
> echo 42 4 2
42 4 2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
echo
echo e um programa que imprime (ecoa) seus argumentos:
> echo 42 4 2
42 4 2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
echo
1 main(int argc , char* argv []){
2 int i;
3 for(i = 1; i < argc; i++){
4 printf("%s", argv[i]);
5 if (i < argc - 1)
6 printf(" ");
7 }
8 printf("\n");
9 }
> a.out 42 4 2
a.out
42 4 2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
echo
1 main(int argc , char* argv []){
2 int i;
3 for(i = 1; i < argc; i++){
4 printf("%s", argv[i]);
5 if (i < argc - 1)
6 printf(" ");
7 }
8 printf("\n");
9 }
> a.out 42 4 2
a.out
42 4 2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
echo (versao 2)
1 main(int argc , char* argv []){
2 while(--argc > 0)
3 printf ((argc > 1) ? "%s " : "%s", *++ argv);
4 printf("\n");
5 }
> a.out 42 4 2
a.out
42 4 2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
echo (versao 2)
1 main(int argc , char* argv []){
2 while(--argc > 0)
3 printf ((argc > 1) ? "%s " : "%s", *++ argv);
4 printf("\n");
5 }
> a.out 42 4 2
a.out
42 4 2
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays de Ponteiros vs Matrizes
1 char *mes[] = {"jan", "fev", "mar", "abr", "mai", "jun",
2 "jul", "ago", "set", "out", "nov", "dez"};
A declaracao acima inicializa um array de ponteiros para strings.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Arrays de Ponteiros vs Matrizes
1 char mes [][3] = {"jan", "fev", "mar", "abr", "mai", "jun",
2 "jul", "ago", "set", "out", "nov", "dez"};
A declaracao acima inicializa uma matriz de chars de tamanho 4.
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Jogo da velha
Exerccio 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!
Marcio M. Ribeiro EACH
Aula 3
-
Enderecos e Ponteiros Arrays e aritmetica com enderecos Strings Matrizes Arrays de Ponteiros
Proxima Aula
Estruturas (struct) e alocacao dinamica.
Marcio M. Ribeiro EACH
Aula 3
Endereos e PonteirosArrays e aritmtica com endereosStringsMatrizesArrays de Ponteiros