Professional Documents
Culture Documents
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;
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
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;
? ? ?
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
4
y
1000
z
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
? ? ? ?
10 ? ? ?
10 20 ? ?
10 20 30 ?
10 20 30 40
? ? ? ?
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
1004
1008
3 ndice
1012 Endereo
p 3000 x 0 1000
1004
1008
3 ndice
1012 Endereo
p 3000 x 0 1000
1004
1008
3 ndice
1012 Endereo
p 3000 x 0 1000
1004
1008
3 ndice
1012 Endereo
p 3000 x 0 1000
1004
1008
3 ndice
1012 Endereo
p 3000 x 0 1000
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
1000
1004
1008
3 ndice
1012 Endereo
x 0 1000
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
a \0
\0
a \0
a \0
\0
a \0