A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Désiré NGuessan Programação II Estruturas de Dados

Apresentações semelhantes


Apresentação em tema: "Désiré NGuessan Programação II Estruturas de Dados"— Transcrição da apresentação:

1 Désiré NGuessan Programação II Estruturas de Dados

2 Désiré NGuessan – Atividade Desenvolva um programa que dados dois números reais chama uma função que troca os valores o protótipo da função deve ser void troca(double a,double b) Faça um teste de mesa apresentando os conteúdos de todas as variáveis usadas no programa

3 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Ponteiro – Ponteiros ou apontadores (em inglês pointers)são variáveis cujo conteúdo é um endereço. Declaração de Variável de tipo Ponteiro – Na linguagem C para declarar um ponteiro usa-se o tipo com os nomes das variáveis precedidos pelo caractere *. – Assim é necessário na declaração de um ponteiro, especificar para qual tipo de variável ele irá apontar. O operador * indica que a variável é um apontador. por exemplo, declarar uma variável de nome p que pode armazenar endereços de memória em que existe um inteiro armazenado. – int *p;

4 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Declaração de Variável de tipo Ponteiro (Exemplos) – por exemplo: int *pi; // ponteiro para int char *pc; // ponteiro para char float *pf; // ponteiro para float double *pd; // ponteiro para double O operador & significa endereço de. Lembra-se do scanf? Agora ficará explicado porque as variáveis no scanf devem vir precedidas por &.

5 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Usos de Ponteiros // variável inteiro int a; // variável ponteiro // para inteiro int* p; Efeito de declarações de variáveis na pilha de execução a p

6 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Usos de Ponteiros // a recebe o valor 5 a = 5; /* p recebe o endereço de a diz-se p aponta para a */ p = &a; /* conteúdo de p recebe o valor 6 */ *p = 6; a p a p a p

7 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória # include int main(void) { int a; int* p; p= &a; *p = 2; printf(%d,a); return 0; } # include int main(void) { int a, b,*p; a=2; *p = 3; b=a+(*p); printf(%d,a); return 0; } ERRO : p não foi inicializado IMPRIME 2

8 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória #include main() {int a, *pa; double b, *pb; char c, *pc; // atribuições de endereços pa = &a; pb = &b; pc = &c; // atribuição de valores a = 1; b = 2.34; c = printf("\n valores:%5d %5.2lf %c", a, b, c); printf("\n ponteiros:%5d %5.2lf %c", *pa, *pb, *pc); printf("\n enderecos:%p %p %p", pa, pb, pc); // mais atribuições de valores usando os ponteiros *pa = 77; *pb = 0.33; *pc = '#'; printf("\n valores :%5d %5.2lf %c", a, b, c); printf("\n ponteiros:%5d %5.2lf %c", *pa, *pb, *pc); printf("\n enderecos:%p %p %p", pa, pb, pc); }

9 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória valores: 1 ponteiros: 1 enderecos: valores : # ponteiros: # enderecos: RESULTADO:

10 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Passando Ponteiros para Funções – Já vimos anteriormente, no estudo das funções em C, que para que tenhamos parâmetros de retorno, isto é, parâmetros que são alterados dentro da função e retornam com esse novo valor, é necessário que passemos o endereço da variável como parâmetro. O endereço nada mais é que um ponteiro.

11 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Passando Ponteiros para Funções – Exemplo: uma função que troca o conteúdo de duas variáveis #include void troca (double *a, double *b) {double aux; aux = *a; *a = *b; *b = aux; } int main () // principal {int a=5, b=7; troca(&a, &b); printf( %lf %lf,a,b); return 0; }

12 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Ponteiro e Vetor – O nome do ponteiro também é um vetor int v[100]; *v = 33; //é o mesmo que v[0] = 33; *(v+2) = 44; é o mesmo que v[2] = 44; for (i=0; i<100; i++) *(v+i) = 0; //zera o vetor v

13 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Ponteiro e Vetor – Podemos também usar um ponteiro como um vetor. int v[100]; int *pv; pv = v; //também pode ser pv = &v[0]; for (i = 0; i < 100; i++) pv[i] = 0; Passando Vetor para função – Passar um vetor para uma função consiste em passar o endereço da primeira posição do vetor

14 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Passando Vetor para função (Continuação) – Os elementos do vetor não são copiados para a função o argumento copiado é apenas o endereço do primeiro elemento

15 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Passando Vetor para função (Continuação) – Exemplo: #include // Função que calcula média float media(int n, float* v) { int i; float s = 0.0f; for (i = 0 ; i

16 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Alocação de Memória – Consiste em requisitar espaços (tamanhos) de memória em tempo de execução do programa. – O espaço alocado dinamicamente permanece reservado até que seja explicitamente liberado pelo programador

17 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Alocação Esquematizado de Memória Código do programa Variáveis globais e estáticas Memória alocada dinamicamente Pilha Memória Livre

18 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Funções para Alocação de Memória – Existem funções, presentes na biblioteca padrão stdlib que permitem alocar e liberar memória dinamicamente: malloc () free() – Exemplo1: int* v; v = malloc(10 * v);

19 Désiré NGuessan Ponteiro e Alocação Dinâmica de Memória Funções para Alocação de Memória Código do programa Variáveis globais e estáticas --- Código do programa Variáveis globais e estáticas 40 bytes 504 v = (int *) malloc(10* sizeof(v));int * v; v v 504

20 Désiré NGuessan – Atividade –Desenvolva um algoritmo que carregue uma matriz 12 X 4 com os valores das vendas de uma loja, em que a cada linha represente um mês do ano, e cada coluna, uma semana do mês. Calcule e imprima: 1.Total vendido em cada mês do ano; 2.Total vendido em cada semana durante todo o ano; 3.Total vendido no ano.


Carregar ppt "Désiré NGuessan Programação II Estruturas de Dados"

Apresentações semelhantes


Anúncios Google