ffaria/aedi2s2017/class04/aed-aula04.pdf · tipo *nome_do_apontador; ) int *p; // declara apontador...

77
"! !"#"#! ! # .1( ) #% ) ) $! # "" .4 " 0./2 + , "! !"#"#! ! , # .1( /*33

Upload: lamtruc

Post on 08-Feb-2019

224 views

Category:

Documents


0 download

TRANSCRIPT

dia int

&dia

int dia

tipo *nome_do_apontador;

int *p; // declara apontador para um int char *tmp; // declara apontador para um char float *ptr; // declara apontador para um float

*

int main(void) { int dia; int *p; dia = 27; p = &dia; *p = 10; return 0; }

main

int main(void) { int dia; int *p; dia = 27; p = &dia; *p = 10; return 0; }

int main(void) { int dia; int *p; dia = 27; p = &dia; *p = 10; return 0; }

int dia

int *p

int main(void) { int dia; int *p; dia = 27; p = &dia; *p = 10; return 0; }

int dia

int *p

dia p p dia

int main(void) { int dia; int *p; dia = 27; p = &dia; *p = 10; return 0; }

int dia

int *p

*p pdia

int main(void) { int dia; int *p; dia = 27; p = &dia; *p = 10; return 0; }

int dia

int *p

int *p; p*p int

int main(void) { int dia; int *p; dia = 27; p = &dia; *p = 10; return 0; }

int dia

int *p

alta

baixa

Esquema da memria do sistema

Pilha

Cdigo doPrograma

VariveisGlobais e Estticas

MemriaAlocada

Memria Livre

stdlib.h

malloc calloc

realloc

freemalloc calloc realloc

malloc

void *malloc(unsigned int size);

size

NULL

void *

calloc

void *calloc(unsigned int num, unsigned int size);

num*size

NULL

realloc

void *realloc(void *ptr, unsigned int size);

ptrsize

ptr NULLmalloc

NULL

free

void free(void *ptr);

ptr

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

main

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

main

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

int *p

mallocint

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

int *p

int ?

malloc

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

int *p

int ?

p p

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

int *p

int ?

p*p

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

int *p

int ?

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

int *p

int ?

#include #include

int main(void) { int *p; p = (int *) malloc(4); *p = 12; printf("%d\n", *p); free(p); return 0; }

int *p

int ?

float char

sizeof()

tipo *p; p = (tipo *) malloc(sizeof(tipo));

float char

sizeof()

tipo *p; p = (tipo *) malloc(sizeof(tipo));

struct Aluno *p; p = (struct Aluno *) malloc(sizeof(struct Aluno));

int *p;

int

int *p;

int

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; }

main

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; }

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3]

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p int *p

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p

#include int main(void) { int A[3] = {1, 2, 3}; int *p; printf("&A[0]: %u\n", &A[0]); printf("&A[1]: %u\n", &A[1]); printf("&A[2]: %u\n", &A[2]); printf("A: %u\n", A); p = &A[0]; // p = A; printf("p: %u,*p: %d\n", p, *p); p = p + 2; printf("p: %u,*p: %d\n", p, *p); return 0; } int A[3] int *p

int A[3] = {1, 2, 3};

A[1] *(A+1)

A[i] *(A+i)

malloc calloc realloc

#include #include int main(void) { int *p, i, n; n = 3; p = (int *) malloc(n * 4); for (i = 0; i < n; i++) p[i] = i+1; free(p); return 0; }

#include #include int main(void) { int *p, i, n; n = 3; p = (int *) malloc(n * 4); for (i = 0; i < n; i++) p[i] = i+1; free(p); return 0; }

float char

tipo *p; p = (tipo *) malloc(n * sizeof(tipo));

float char

tipo *p; p = (tipo *) malloc(n * sizeof(tipo));

struct Aluno *p; p = (struct Aluno *) malloc(n * sizeof(struct Aluno));

int *p; p = (int *) malloc(4 * sizeof(int));

int *p

int *p1, *p2; p1 = (int *) malloc(4 * sizeof(int)); p2 = (int *) malloc(4 * sizeof(int));

int *p2

int *p1

int *p2

int *p1

int *pm

int *p[MAX]

free

#include #include int main(void) { int **M; int i, ncols = 5, nrows = 6; M = (int **) malloc(nrows * sizeof(int *)); for (i = 0; i < nrows; i++) M[i] = (int *) malloc(ncols * sizeof(int)); // Agora podemos acessar M[i][j]: Matriz M na linha i, coluna j ... // Desaloca memria for (i = 0; i < nrows; i++) free(M[i]); free(M); return 0; }

var

#include void LeInteiro(int x) { printf("Entre com x: "); scanf("%d", &x); } int main(void) { int x; LeInteiro(x); printf("x: %d\n", x); return 0; }

#include void LeInteiro(int x) { printf("Entre com x: "); scanf("%d", &x); } int main(void) { int x; LeInteiro(x); printf("x: %d\n", x); return 0; }

#include void LeInteiro(int x) { printf("Entre com x: "); scanf("%d", &x); } int main(void) { int x; LeInteiro(x); printf("x: %d\n", x); return 0; }

#include int LeInteiro() { int x; printf("Entre com x: "); scanf("%d", &x); return x; } int main(void) { int x; x = LeInteiro(); printf("x: %d\n", x); return 0; }

#include void LeInteiro(int x) { printf("Entre com x: "); scanf("%d", &x); } int main(void) { int x; LeInteiro(x); printf("x: %d\n", x); return 0; }

#include int LeInteiro() { int x; printf("Entre com x: "); scanf("%d", &x); return x; } int main(void) { int x; x = LeInteiro(); printf("x: %d\n", x); return 0; }

#include void LeInteiro(int x) { printf("Entre com x: "); scanf("%d", &x); } int main(void) { int x; LeInteiro(x); printf("x: %d\n", x); return 0; }

#include void LeInteiro(int *p) { int x; printf("Entre com x: "); scanf("%d", &x); *p = x; } int main(void) { int x; LeInteiro(&x); printf("x: %d\n", x); return 0; }

#include void aloca(int *x, int n) { x = (int *) malloc(n * sizeof(int)); x[0] = 20; } int main(void) { int *a; aloca(a, 10); a[1] = 40; }

#include void aloca(int *x, int n) { x = (int *) malloc(n * sizeof(int)); x[0] = 20; } int main(void) { int *a; aloca(a, 10); a[1] = 40; }

Alocando memria para a cpia de *x

#include void aloca(int *x, int n) { x = (int *) malloc(n * sizeof(int)); x[0] = 20; } int main(void) { int *a; aloca(a, 10); a[1] = 40; }

Alocando memria para a cpia de *x

Error! Access Violation!

#include void aloca(int **x, int n) { (*x) = (int *) malloc(n * sizeof(int)); (*x)[0] = 20; } int main(void) { int *a; aloca(&a, 10); a[1] = 40; }

#include typedef struct { int idade; double salario; } TRegistro; int main(void) { TRegistro *reg; ... reg = (TRegistro *) malloc(sizeof(TRegistro)); reg->idade = 30; // (*a).idade = 30 reg->salario = 80; // (*a).salario = 80 return 0; }

#include #include void LeVetor(int *v, int n) { int i; for (i = 0; i < n; i++) scanf("%d", &v[i]); } void ImprimeVetor(int *v, int n) { int i; for (i = 0; i < n; i++) printf("%d\n", v[i]); } int main(void) { int *v, n; scanf("%d", &n); v = (int *) malloc(n * sizeof(int)); LeVetor(v, n); ImprimeVetor(v, n); free(v); }