You are on page 1of 52

Variveis

Conceitos
So alocadas em memria; Elas ocupam uma quantidade de bytes que depende do tipo da varivel; Esses bytes so alocados de forma contgua na memria; O valor de uma varivel corresponde ao dado que est armazenado nesses bytes; O endereo de uma varivel corresponde ao endereo de memria onde est alocado o primeiro byte que conjunto de bytes que a compe; O endereo de uma varivel determinado pelo sistema de execuo.

Linguagem C
Seja x o nome de uma varivel inteira (int); x ocupa 4 bytes consecutivos de memria; Quando usado em expresses, x denota o valor inteiro armazenado nesses 4 bytes; Quando usado no lado esquerdo de um comando de atribuio, x denota o endereo da varivel x; &x denota o endereo da varivel x e corresponde ao endereo de memria do primeiro byte dos 4 que compem x; & uma operao unria que retorna o endereo da varivel fornecida como argumento.

int x,y;
1000

x e y ocupam 4 bytes consecutivos cada; x (y) inicia no endereo 1000 (1004) e termina no endereo 1003 (1007); O endereo de x (y) 1000 (1004); Os valores iniciais de x e de y so indeterminados;

1001 1002 1003

1004 1005 1006 1007

x=0;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 1004 1005 1006 1007 1000 1001 1002 1003

y=x+1;
x 1000 1001 1002 1003 y 1004 1005 1006 1007

x=&y+2;
x

1006
y

Ponteiros

Conceitos
uma varivel que contm o endereo de outra varivel; O valor armazenado num ponteiro corresponde ao endereo de outra varivel, mesmo que esta outra tambm seja um ponteiro; Deve-se dereferenciar a varivel ponteiro para acessar o valor a que ele se refere; Variveis do tipo ponteiro permitem mltiplas formas de acesso a um mesmo valor;

Linguagem C
Deve-se definir o tipo do valor que ser armazenado na posio de memria indicada pelo endereo contido na varivel ponteiro (tipo do valor apontado); Uma varivel do tipo ponteiro ocupa 4 bytes de memria, independentemente do tipo do valor apontado; Para acessar o valor apontado pela varivel ponteiro deve-se usar o operador *; * uma operao unria que retorna o valor armazenado no endereo memria contido na varivel usada como argumento da operao.

int x,*y;
x e y ocupam 4 bytes consecutivos cada; x (y) inicia no endereo 1000 (1004) e termina no endereo 1003 (1007); O endereo de x (y) 1000 (1004); Os valores iniciais de x e de y so indeterminados; x do tipo inteiro; y do tipo ponteiro para inteiro;
1000 1001 1002 1003

1004 1005 1006 1007

y=&x;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 1004 1005 1006 1007 1000 1001 1002 1003

x=1;
x 1000 1001 1002 1003 y 1004 1005 1006 1007

*y=*y+2;
x

3
y

1000

1000

1000

x=x+*y;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 1004 1005 1006 1007 x 1000 1001 1002 1003

y=y+1;
x 1000 1001 1002 1003 y 1004 1005 1006 1007

*y=0;
x

6
y

1000

1004

int x,*y,*z;

1000 1001 1002 1003

? ? ?

x do tipo inteiro; y do tipo inteiro; z do tipo ponteiro para inteiro;

1004 1005 1006 1007 1008 1009 1010 1011 z y

x=0;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011 1008 1004 1000

y=&x;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011

z=&x;
x 1001 1002 1003 y 1005 1006 1007 z 1009 1010 1011

0 ? ?

0 1000 ?

0 1000 1000

*y=*y+1;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011 1008 1004 1000

*z=*z+1;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011

*y=*y+*z+x;
x 1001 1002 1003 y 1005 1006 1007 z 1009 1010 1011

1 1000 1000

2 1000 1000

6 1000 1000

int x,*y,**z;

1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011

? ? ?

x do tipo inteiro; y do tipo ponteiro para inteiro; z do tipo ponteiro para ponteiro para inteiro;

x=0;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011 1008 1004 1000

y=&x;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011

z=&y;
x 1001 1002 1003 y 1005 1006 1007 z 1009 1010 1011

0 ? ?

0 1000 ?

0 1000 1004

**z=**z+1;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011 1008 1004 1000

*y=*y+1;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011

x=x+1;
x 1001 1002 1003 y 1005 1006 1007 z 1009 1010 1011

1 1000 1004

2 1000 1004

3 1000 1004

*z=&x+4;
x 1000 1001 1002 1003 y 1004 1005 1006 1007 z 1008 1009 1010 1011

*(y-4)=*(y-4)+1;
x 1000 1000 1001 1002 1003 y 1004 1004 1005 1006 1007 z 1008 1008 1009 1010 1011

y=y-4;
x

3 1016 1004

4 1016 1004

1001 1002 1003

4
y

1005 1006 1007

1000
z

1009 1010 1011

1004

Vetores

Conceitos
Um vetor um agregado de dados homogneo, pois ele composto de uma coleo de valores de um mesmo tipo; Normalmente usado para representar colees de valores afins; Os valores armazenados nos elementos de um vetor podem ser consultados e modificados de forma independente uns dos outros; Em casos especiais o vetor pode ser tratado como um objeto nico.

Conceitos
Os elementos de um vetor so alocados de forma contgua na memria do computador; O primeiro elemento referenciado pelo ndice inicial e o ltimo pelo ndice final; ndice no elemento endereo do elemento; A operao de indexao permite selecionar um elemento do agregado; A indexao normalmente feita atravs de expresses inteiras; A indexao com valores fora dos limites especificados constitui erro, o qual muitas vezes detectado apenas em tempo de execuo e pode provocar situaes imprevisveis.

Conceitos
Atributos de um vetor: Nome; Tipo dos seus elementos; Quantidade de elementos; ndice do primeiro elemento; ndice do ltimo elemento.

Linguagem C
Deve-se especificar a quantidade de elementos do vetor; A expresso que define a quantidade de elementos do vetor avaliada em tempo de execuo; O ndice inicial sempre 0 (zero); O ndice final a quantidade de elementos menos 1 (um); A indexao de um vetor feita atravs do operador [...] logo aps o nome do vetor;

Linguagem C
A expresso indexadora, utilizada dentro dos colchetes, avaliada em tempo de execuo e deve resultar num valor do tipo inteiro (ou char); A declarao de um vetor implica a alocao em memria de um objeto com tamanho total correspondente ao nmero de elementos multiplicado pelo tamanho do elemento.

int x[4];
x

Nome do vetor: x; Tipos dos seus elementos: inteiro; Quantidade de elementos: 4; ndice do primeiro elemento: 0; ndice do ltimo elemento: 3; Os elementos 0, 1, 2 e 3 esto alocados, respectivamente, nos endereos de memria 1000, 1004, 1008 e 1012; O vetor ocupa um total de 16 bytes, iniciando no endereo 1000 e terminando no endereo 1015

1000

1004

1008

3 ndice

1012 Endereo

x[0]=10; x[1]=20; x[2]=30; x[3]=40;

? ? ? ?

10 ? ? ?

10 20 ? ?

10 20 30 ?

10 20 30 40

for (i=0;i<4;i++) x[i]=(i+1)*10;

? ? ? ?

10 ? ? ?

10 20 ? ?

10 20 30 ?

10 20 30 40

Vetores x ponteiros

Linguagem C
Nomes de vetores podem ser manipulados como ponteiros; Nomes de vetores podem ser atribudos para variveis do tipo ponteiro; Variveis do tipo ponteiro podem ser usadas para acessar os elementos de um vetor; Operaes aritmticas sobre valores do tipo ponteiro (soma e subtrao apenas) consideram o tamanho do objeto apontado e fazem os ajustes correspondentes automaticamente.

p 3000 ? x 0 1000

int x[4],*p;
p um ponteiro para inteiro; Como x um vetor de inteiros, ento p pode receber o valor armazenado em x; Nesse caso, x aponta para o mesmo vetor que a varivel x; O vetor pode ser acessado atravs do ponteiro tambm; x[i] o mesmo que *(p+i).

1004

1008

3 ndice

1012 Endereo

p 3000 x 0 1000

p=x;

1004

1008

3 ndice

1012 Endereo

p 3000 x 0 1000

p=x; *p=0;

1004

1008

3 ndice

1012 Endereo

p 3000 x 0 1000

p=x; *p=0; *p=*p+1;

1004

1008

3 ndice

1012 Endereo

p 3000 x 0 1000

p=x; *p=0; *p=*p+1; *(p+1)=1;

1004

1008

3 ndice

1012 Endereo

p 3000 x 0 1000

p=x; *p=0; *p=*p+1; *(p+1)=1; *(p+1)=*(p+1)+1;

1004

1008

3 ndice

1012 Endereo

p 3000 x 0 1000

p=x; *p=0; *p=*p+1; *(p+1)=1; *(p+1)=*(p+1)+1; *(p+2)=*(p+1)+1;

1004

1008

3 ndice

1012 Endereo

p 3000 x 0 1000

p=x; *p=0; *p=*p+1; *(p+1)=1; *(p+1)=*(p+1)+1; *(p+2)=*(p+1)+1; p=p+3;

1004

1008

3 ndice

1012 Endereo

p 3000 x 0 1000

p=x; *p=0; *p=*p+1; *(p+1)=1; *(p+1)=*(p+1)+1; *(p+2)=*(p+1)+1; p=p+3; *p=4;

1004

1008

3 ndice

1012 Endereo

int x[4];

1000

x, que o nome de um vetor de inteiros, pode ser usado da mesma forma que um ponteiro para inteiro; x[i] o mesmo que *(x+i).

1004

1008

3 ndice

1012 Endereo

*x=0; *x=*x+1; *(x+1)=1; *(x+1)=*(x+1)+1; *(x+2)=*(x+1)+1; *(x+3)=4;

1000

1004

1008

3 ndice

1012 Endereo

x 0 1000

int i,x[4]; for (i=0;i<4;i++) *(x+i)=i+2; for (i=0;i<4;i++) printf ("%d",*(x+i));

1004

1008

3 ndice

1012 Endereo

Strings

Conceitos
um tipo de dados agregado homogneo em que o tipo do elemento caracter; Serve, portanto, para representar cadeias de caracteres e facilitar a manipulao das mesmas; As operaes variam muito conforme a linguagem de programao, mas as mais usuais so leitura, escrita, atribuio, concatenao, comparao, pesquisa e segmentao.

Linguagem C
Uma cadeia de caracteres um vetor cujo elemento do tipo char; O vetor pode comportar cadeias de caracteres cujo tamanho no exceda o seu prprio tamanho menos 1 (um); Toda cadeia de caracteres deve terminar com o caracter especial \0, que representa o nmero zero em forma binria e no corresponde a nenhum caracter visvel; Os elementos podem ser indexados individualmente;

Linguagem C
A biblioteca <string.h> disponibiliza uma srie de operaes para manipulao de strings como um objeto, sem ter que indexar seus elementos individualmente. Principais funes: gets() strlen() strchr() strstr() strcpy() strcmp() strcat()

char s[10];

s[0]=a;

strcpy(s,strings);

s \0

strcpy(s,beta);

a \0

\0

char *t; t=strstr(s,et);

a \0

\0

a \0

a \0

char *u; u=strcat(s,t);

\0

a \0

You might also like