Escolar Documentos
Profissional Documentos
Cultura Documentos
Ponteiros
Vimos que ponteiros so referncias para reas de memria que deve conter dados teis. O ponteiro deve possuir o mesmo tipo para o qual aponta.
Em Java, toda varivel alocada dinamicamente, todo arranjo e todo objeto na realidade um tipo de ponteiro.
Em C/C++ o ponteiro um tipo de varivel explicita, e possui algumas operaes importantes.
Ponteiros
int *p; int num = 20; p = # //inicializao do ponteiro. Importante para que o ponteiro saiba // para onde estar apontando. O & retorna o endereo da varivel num. *p = 10; // Qual ser o valor de num? Para saber explicitamente qual o endereo, podemos solicitar:
printf(%p, p) //Note que o %p prepara a sada para exibir o endereo de memria.
Ponteiros
Outras operaes: int *p1, *p2; int num; p1 = # p2 = p1; //Iguala os ponteiros, significa que p2 aponta para o mesmo local //que p1. Se for necessrio que um ponteiro receba o valor de outro ponteiro, deveriase fazer: *p2 = *p1 Assim, lembramos que o operador * indica o contedo da regio de memria para onde o ponteiro est referenciando O incremento ++ -- faz com que o ponteiro se locomova em funo da quantidade de bytes do tipo especificado
Ponteiros
int *p; int num[3] = {20, -10; 50}; p = # Desta forma, num[0] = p+0; num[1] = p+1; num[2] = p+2;
Caso queira-se mudar o valor com incremento, deveria ser feito: (*p)++;
A comparao indica diretamente se a rea de memria est numericamente a frente ou atrs: p1 > p2 A == e != indica se apontam ou no para o mesmo local
Ponteiros
int main() { int y, *p, x; y = 0; p = &y; x = *p; x = 4; (*p)++; x--; (*p) += x; printf ("y = %d\n", y); return(0); } - Qual a sada deste programa?
Ponteiros e Matrizes
int main () { float matrx [50][50]; int i,j; for (i=0;i<50;i++) for (j=0;j<50;j++) matrx[i][j]=0.0; return(0); } Podemos reescrev-lo usando ponteiros: int main () { float matrx [50][50]; float *p; int count; p=matrx[0]; for (count=0;count<2500;count++){ *p=0.0; p++; } return(0);
Ponteiros e Matrizes
Note que para matrizes de mais de uma dimenso, deve-se passar o primeiro endereo. Para vetores (1 dimenso) no necessrio: int n[5]; int *p; p = n; /*note que tambm no necessrio o endereo do vetor, pois n j uma referncia para uma rea de memria alocada para receber 5 inteiros.*/
Ponteiros e Matrizes
Programa exemplo:
Ponteiros e Matrizes
Utilizando o q para mostrar o valor, indique qual o erro e concerte abaixo para mostrar o valor correto, 10:
#include <stdio.h> int main(){ int x, *p, **q; p = &x; q = &p; x = 10; printf("\n%d\n", &q); return(0); }
Arranjos (Arrays)
De forma simples e direta, representam matrizes. So colees numeradas (ndices) de variveis de um mesmo tipo. um tipo de estrutura de dados.
Exemplos? Utilidade? Restries?
Arranjos (Arrays)
tipo[] nome = {elem0, elem1, elem2..., elemTam-1} tipo[] nome;
nome = new tipo[tamanho];
Escreva um programa que receba como entrada 2 arranjos de n elementos e retorne um arranjo c com o produto escalar de a por b
Crie uma classe de sua escolha e crie um arranjo de objetos desta classe. Faa a manipulao para preenchimento e exibio das informaes preenchidas.