fundamentos1 slidesc15 2008-09-30
TRANSCRIPT
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
1/12
Fundamentos de Programao 1
Slides 15
Prof. SIMO
Jean Marcelo SIMO
Linguagem CAtribuio, Aritmtica eComparao de Ponteiros
- Vetores e Ponteiros.
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
2/12
Atribuio de Ponteiros.
#include #include
void main ()
{
int x = 3;
int *p1, *p2;
p1 = &x;
p2 = p1;
printf (" O endereo da varivel x %p. \n", p2 );
system ("Pause");
return 0;
}
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
3/12
Memria
Pilha
Heap
Variveis Globais
Cdigo do Programa
Um mapa conceitual da memria
de um programa em C.
Memria Voltil de
acesso aleatrio (RAM)
Memria Permanente
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
4/12
Variveis em C
8Aproximadamente 10 dgitos de precisodouble
0-void
10Aproximadamente 10 dgitos de precisolong double
4Aproximadamente 6 dgitos de precisofloat
4-4.294.967.296 a 4.294.967.296long int20 a 65.535unsigned int
1-128 a 127short int
2-32.768 a 32.767int
10 a 255char
Total de BytesUtilizados
VariaoTipo de dados
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
5/12
Aritmtica de Ponteiro
3005
3004
3003
3002
30013000CH
CH + 1
CH + 2
CH + 3
CH + 4
CH + 5
INTEIRO
INTEIRO + 1
void main (){
char *CH;CH = 3000;printf (" O endereo apontado por ch %p. \n", ch );CH = CH + 1;printf (" O endereo apontado por ch %p. \n", ch );CH = CH + 1;printf (" O endereo apontado por ch %p. \n", ch );
}
Endereos de Memria.
void main (){
int *INTEIRO;INTEIRO = 3000;printf (" O endereo apontado por INTEIRO %p. \n", INTEIRO );INTEIRO = INTEIRO + 1;printf (" O endereo apontado por INTEIRO %p. \n", INTEIRO );INTEIRO = INTEIRO + 1;
printf (" O endereo apontado por INTEIRO %p. \n", INTEIRO );}
INTEIRO + 1
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
6/12
Vetores e Ponteiros#include #include int main(){ // Define e inicializa uma string.
char str [80] = "Universidades";// Um ponteiro chamando Pont para caractere.char *Pont;// O ponteiro Pont recebe o endereo da primeira posio da str.// O nome de um string sozinho sempre o endereo da primeira posio.// Obs.: Neste caso, no necessrio &.
Pont = str;
// Enquanto o contedo do ponteiro no for \0.while ( *Pont != '\0'){
putchar (*Pont);// Aritmtica de ponteiros
Pont = Pont + 1;}printf("\n");
Pont = str;
// O ponteiro que aponta para o primeiro elemento de uma string pode ainda se
// comportar como um vetor!!!!int idx = 0;while( Pont[idx] != '\0 ){
putchar( Pont[idx] );idx = idx + 1;
}printf("\n");system("Pause");return 0;
}
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
7/12
#include #include int main(){ // Define e inicializa uma string.
char str [80] = "Universidades";// Um ponteiro chamando Pont para caractere.char *Pont;// O ponteiro Pont recebe o endereo da primeira posio da str.// O nome de um string sozinho sempre o endereo da primeira posio.// Obs.: Neste caso, no necessrio &.
Pont = str;
// Enquanto o contedo do ponteiro no for \0.while ( *Pont ){
putchar (*Pont);// Aritmtica de ponteiros
Pont = Pont + 1;}printf("\n");
Pont = str;
// O ponteiro que aponta para o primeiro elemento de uma string pode ainda se
// comportar como um vetor!!!!int idx = 0;while( Pont[idx] ){
putchar( Pont[idx] );idx = idx + 1;
}printf ("\n");system("Pause");return 0;
}
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
8/12
#include #include
#define TAMANHO 5
// cabealho de funo para empilhar nmero em um vetorvoid empilha ( int i );
// cabealho de funo para desempilhar nmero em um vetorint desempilha ();
// ponteiro para topo (fim) de vetorint *Topo;
// ponteiro para base (incio) de vetorint *Base;
// ponteiro para navegar sobre o vetor pilha via aritmtica de ponteirosint *Pont;
// vetor para pilha (primeiro nmero a entrar ultimo a sair)int Pilha[TAMANHO];
Exemplo - Pilha
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
9/12
// funo principalint main(){
int valor, cont = 0;
// Isto significa que o ponteiro Base recebe o endereo de incio do vetor Pilha.// (Note que no h & comercial para receber o endereo quando se trata de um vetor!)// (Isto porque o prprio (nome do) vetor internamente implementado como ponteiro...)// (Isto , o nome do vetor um ponteiro)Base = Pilha;// O ponteiro Pont recebe o ponteiro BasePont = Base;
// O ponteiro Topo recebe o endereo de fim do vetor PilhaTopo = Base + TAMANHO;
// O programa em si.printf ("Programa para empilhar valores\n");do{
printf ( "Digite um valor: (-1 para parar)\n );scanf ( "%d", &valor );if ( valor != -1 ){
empilha (valor);cont = cont + 1;
}} while ( valor != -1 );
int i;for ( i = 0; i < cont; i = i + 1 ){
valor = desempilha();printf("O %d o. valor desempilhado %d \n", i+1, valor);
}
system("Pause");return 0;
}
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
10/12
void empilha ( int i ){
// Se o ponteiro Pont estiver apontando j para o topo// ento no se pode mais empilhar o nmero i
if ( Pont == Topo ){
printf ("Pilha cheia! \n");// sai do programaexit (1);
}else
{
// A "varivel" apontada por Pont recebe o valor de i , i.e. a posio Pilha[0] recebe o valor de i.*Pont = i;
// ponteiro Pont avana da sua posio inicial em 2 bytes (tamanho de um inteiro)// (i.e. Pont avana para seu endereo imediatamente superior)
Pont = Pont + 1;
}}
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
11/12
int desempilha ( ){// varivel intermediriaint valor;
// Se o ponteiro Pont estiver num endereo maior ou igual que o do Base, isto ,// Se ele tiver endereo maior ou igual que incio do Vetor Pilha...// ento se extrai a informao em uma varivel intermediria.if ( Pont >= Base ){
// Ponteiro Pont aponta para seu endereo imediatamente inferiorPont = Pont - 1;
// Valor recebe o valor da 'varivel' apontado por Pont.valor = *Pont;
}else{
printf ("Pilha vazia!\n");exit (1);
}return valor;
}
-
7/24/2019 Fundamentos1 SlidesC15 2008-09-30
12/12