mc-202 — unidade 2 revisão: ponteiros, alocação dinâmica e ...€¦ · ponteiros toda...
TRANSCRIPT
![Page 1: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/1.jpg)
MC-202 — Unidade 2Revisão: Ponteiros, Alocação Dinâmica e
Tipo Abstrato de Dados
Rafael C. S. [email protected]
Universidade Estadual de Campinas
1º semestre/2017
![Page 2: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/2.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 3: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/3.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 4: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/4.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 5: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/5.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 100
34 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 6: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/6.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];
6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 7: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/7.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;
7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 8: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/8.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;
8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 9: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/9.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);
9 for (i = 0; i < n; i++)10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 10: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/10.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);
11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 11: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/11.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;
12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 12: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/12.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {
13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 13: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/13.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }
16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 14: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/14.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);
17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 15: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/15.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?
2
![Page 16: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/16.jpg)
ProblemaDados um conjunto de pontos do plano, como calcular ocentroide?
1 #include <stdio.h>2 #define MAX 10034 int main() {5 float x[MAX], y[MAX];6 float cx, cy;7 int i, n;8 scanf("%d", &n);9 for (i = 0; i < n; i++)
10 scanf("%f %f", &x[i], &y[i]);11 cx = cy = 0;12 for (i = 0; i < n; i++) {13 cx += x[i]/n;14 cy += y[i]/n;15 }16 printf("%f %f\n", cx, cy);17 return 0;18 }
E se tivermos mais do que MAX pontos?2
![Page 17: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/17.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória
– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 18: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/18.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória
– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 19: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/19.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também
– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 20: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/20.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 21: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/21.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço
• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 22: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/22.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 23: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/23.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 24: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/24.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:
• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 25: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/25.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 26: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/26.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int
– seu tipo é int *• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 27: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/27.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 28: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/28.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double
• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 29: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/29.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 30: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/30.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char
– é um ponteiro para um char *• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 31: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/31.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int
3
![Page 32: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/32.jpg)
PonteirosToda informação usada pelo programa está em algum lugar
• Toda variável tem um endereço de memória– cada posição de um vetor também– espaços de memória alocados dinamicamente também
Um ponteiro é uma variável que armazena um endereço• para um tipo específico de informação (ex: int)
– veremos o porquê disso
Por exemplo:• int *p é um ponteiro para int
– armazena um endereço de um int– seu tipo é int *
• double *q é um ponteiro para double• char **r é um ponteiro para um ponteiro para char
– armazena um endereço de um ponteiro para char– é um ponteiro para um char *
• int ***s é ponteiro de ponteiro de ponteiro para int3
![Page 33: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/33.jpg)
Operações com ponteiros
Operações básicas:
• & retorna o endereço de memória de uma variável
– ou posição de um vetor
• * acessa o conteúdo do endereço indicado pelo ponteiro
1 int *endereco;2 int variavel = 90;3 endereco = &variavel;4 printf("Variavel: %d\n", variavel);5 printf("Variavel: %d\n", *endereco);6 printf("Endereço: %p\n", endereco);7 printf("Endereço: %p\n", &variavel);
endereco90
variavel
127
127endereco
4
![Page 34: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/34.jpg)
Operações com ponteiros
Operações básicas:• & retorna o endereço de memória de uma variável
– ou posição de um vetor
• * acessa o conteúdo do endereço indicado pelo ponteiro
1 int *endereco;2 int variavel = 90;3 endereco = &variavel;4 printf("Variavel: %d\n", variavel);5 printf("Variavel: %d\n", *endereco);6 printf("Endereço: %p\n", endereco);7 printf("Endereço: %p\n", &variavel);
endereco90
variavel
127
127endereco
4
![Page 35: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/35.jpg)
Operações com ponteiros
Operações básicas:• & retorna o endereço de memória de uma variável
– ou posição de um vetor
• * acessa o conteúdo do endereço indicado pelo ponteiro
1 int *endereco;2 int variavel = 90;3 endereco = &variavel;4 printf("Variavel: %d\n", variavel);5 printf("Variavel: %d\n", *endereco);6 printf("Endereço: %p\n", endereco);7 printf("Endereço: %p\n", &variavel);
endereco90
variavel
127
127endereco
4
![Page 36: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/36.jpg)
Operações com ponteiros
Operações básicas:• & retorna o endereço de memória de uma variável
– ou posição de um vetor
• * acessa o conteúdo do endereço indicado pelo ponteiro
1 int *endereco;2 int variavel = 90;3 endereco = &variavel;4 printf("Variavel: %d\n", variavel);5 printf("Variavel: %d\n", *endereco);6 printf("Endereço: %p\n", endereco);7 printf("Endereço: %p\n", &variavel);
endereco90
variavel
127
127endereco
4
![Page 37: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/37.jpg)
Operações com ponteiros
Operações básicas:• & retorna o endereço de memória de uma variável
– ou posição de um vetor
• * acessa o conteúdo do endereço indicado pelo ponteiro
1 int *endereco;2 int variavel = 90;3 endereco = &variavel;4 printf("Variavel: %d\n", variavel);5 printf("Variavel: %d\n", *endereco);6 printf("Endereço: %p\n", endereco);7 printf("Endereço: %p\n", &variavel);
endereco90
variavel
127
127endereco
4
![Page 38: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/38.jpg)
Operações com ponteiros
Operações básicas:• & retorna o endereço de memória de uma variável
– ou posição de um vetor
• * acessa o conteúdo do endereço indicado pelo ponteiro
1 int *endereco;2 int variavel = 90;3 endereco = &variavel;4 printf("Variavel: %d\n", variavel);5 printf("Variavel: %d\n", *endereco);6 printf("Endereço: %p\n", endereco);7 printf("Endereço: %p\n", &variavel);
endereco90
variavel
127
127endereco
4
![Page 39: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/39.jpg)
Operações com ponteiros
Operações básicas:• & retorna o endereço de memória de uma variável
– ou posição de um vetor
• * acessa o conteúdo do endereço indicado pelo ponteiro
1 int *endereco;2 int variavel = 90;3 endereco = &variavel;4 printf("Variavel: %d\n", variavel);5 printf("Variavel: %d\n", *endereco);6 printf("Endereço: %p\n", endereco);7 printf("Endereço: %p\n", &variavel);
endereco90
variavel
127
127endereco
4
![Page 40: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/40.jpg)
Alocação dinâmica
Às vezes queremos armazenar mais dados
Mas por quê não declarar mais variáveis?• Não sabemos quantas variáveis e quando declará-las• Uma função pode ter que armazenar uma informação
para outras funções usarem• Queremos usar uma organização mais complexa da
memória (estruturadedados)
5
![Page 41: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/41.jpg)
Alocação dinâmica
Às vezes queremos armazenar mais dados
Mas por quê não declarar mais variáveis?
• Não sabemos quantas variáveis e quando declará-las• Uma função pode ter que armazenar uma informação
para outras funções usarem• Queremos usar uma organização mais complexa da
memória (estruturadedados)
5
![Page 42: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/42.jpg)
Alocação dinâmica
Às vezes queremos armazenar mais dados
Mas por quê não declarar mais variáveis?• Não sabemos quantas variáveis e quando declará-las
• Uma função pode ter que armazenar uma informaçãopara outras funções usarem
• Queremos usar uma organização mais complexa damemória (estruturadedados)
5
![Page 43: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/43.jpg)
Alocação dinâmica
Às vezes queremos armazenar mais dados
Mas por quê não declarar mais variáveis?• Não sabemos quantas variáveis e quando declará-las• Uma função pode ter que armazenar uma informação
para outras funções usarem
• Queremos usar uma organização mais complexa damemória (estruturadedados)
5
![Page 44: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/44.jpg)
Alocação dinâmica
Às vezes queremos armazenar mais dados
Mas por quê não declarar mais variáveis?• Não sabemos quantas variáveis e quando declará-las• Uma função pode ter que armazenar uma informação
para outras funções usarem• Queremos usar uma organização mais complexa da
memória (estruturadedados)
5
![Page 45: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/45.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis
– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática
• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 46: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/46.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis
– Em geral, espaço limitado (ex: 8MB)• Heap: onde são armazenados dados que não estão em
variáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática
• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 47: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/47.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática
• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 48: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/48.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática
• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 49: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/49.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática
• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 50: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/50.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:
• O compilador reserva um espaço na pilha
– alocação estática
• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 51: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/51.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 52: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/52.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática
• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 53: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/53.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática• A variável é acessada por um nome bem definido
• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 54: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/54.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 55: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/55.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:
• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 56: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/56.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 57: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/57.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int
• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 58: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/58.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int• Devemos guardar o endereço da variável com um ponteiro
• O espaço deve ser liberado usando free
6
![Page 59: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/59.jpg)
Organização da memóriaA memória de um programa é dividida em duas partes:
• Pilha: onde são armazenadas as variáveis– Em geral, espaço limitado (ex: 8MB)
• Heap: onde são armazenados dados que não estão emvariáveis
– Do tamanho da memória RAM
Variáveis:• O compilador reserva um espaço na pilha
– alocação estática• A variável é acessada por um nome bem definido• O espaço é liberado quando a função termina
Alocação dinâmica:• malloc reserva um número de bytes no heap
– Ex: malloc(sizeof(int)) aloca o espaço para um int• Devemos guardar o endereço da variável com um ponteiro• O espaço deve ser liberado usando free
6
![Page 60: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/60.jpg)
Criando uma variável int dinamicamente
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 int *ponteiro;67 ponteiro = malloc(sizeof(int));8 if (ponteiro == NULL) {9 printf("Não há mais memória!\n");
10 exit(1);11 }1213 *ponteiro = 13;14 printf("Endereco %p com valor %d.\n", ponteiro, *ponteiro);1516 free(ponteiro);17 return 0;18 }
7
![Page 61: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/61.jpg)
Criando uma variável int dinamicamente
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {
5 int *ponteiro;67 ponteiro = malloc(sizeof(int));8 if (ponteiro == NULL) {9 printf("Não há mais memória!\n");
10 exit(1);11 }1213 *ponteiro = 13;14 printf("Endereco %p com valor %d.\n", ponteiro, *ponteiro);1516 free(ponteiro);17 return 0;18 }
7
![Page 62: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/62.jpg)
Criando uma variável int dinamicamente
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 int *ponteiro;
67 ponteiro = malloc(sizeof(int));8 if (ponteiro == NULL) {9 printf("Não há mais memória!\n");
10 exit(1);11 }1213 *ponteiro = 13;14 printf("Endereco %p com valor %d.\n", ponteiro, *ponteiro);1516 free(ponteiro);17 return 0;18 }
7
![Page 63: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/63.jpg)
Criando uma variável int dinamicamente
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 int *ponteiro;67 ponteiro = malloc(sizeof(int));
8 if (ponteiro == NULL) {9 printf("Não há mais memória!\n");
10 exit(1);11 }1213 *ponteiro = 13;14 printf("Endereco %p com valor %d.\n", ponteiro, *ponteiro);1516 free(ponteiro);17 return 0;18 }
7
![Page 64: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/64.jpg)
Criando uma variável int dinamicamente
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 int *ponteiro;67 ponteiro = malloc(sizeof(int));8 if (ponteiro == NULL) {9 printf("Não há mais memória!\n");
10 exit(1);11 }
1213 *ponteiro = 13;14 printf("Endereco %p com valor %d.\n", ponteiro, *ponteiro);1516 free(ponteiro);17 return 0;18 }
7
![Page 65: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/65.jpg)
Criando uma variável int dinamicamente
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 int *ponteiro;67 ponteiro = malloc(sizeof(int));8 if (ponteiro == NULL) {9 printf("Não há mais memória!\n");
10 exit(1);11 }1213 *ponteiro = 13;
14 printf("Endereco %p com valor %d.\n", ponteiro, *ponteiro);1516 free(ponteiro);17 return 0;18 }
7
![Page 66: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/66.jpg)
Criando uma variável int dinamicamente
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 int *ponteiro;67 ponteiro = malloc(sizeof(int));8 if (ponteiro == NULL) {9 printf("Não há mais memória!\n");
10 exit(1);11 }1213 *ponteiro = 13;14 printf("Endereco %p com valor %d.\n", ponteiro, *ponteiro);
1516 free(ponteiro);17 return 0;18 }
7
![Page 67: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/67.jpg)
Criando uma variável int dinamicamente
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 int *ponteiro;67 ponteiro = malloc(sizeof(int));8 if (ponteiro == NULL) {9 printf("Não há mais memória!\n");
10 exit(1);11 }1213 *ponteiro = 13;14 printf("Endereco %p com valor %d.\n", ponteiro, *ponteiro);1516 free(ponteiro);17 return 0;18 }
7
![Page 68: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/68.jpg)
Regras da alocação dinâmica
• Incluir a biblioteca stdlib.h
• O tamanho gasto por um tipo pode ser obtido com sizeof
• Informar o tamanho a ser reservado para malloc
• Verificar se acabou a memória comparando com NULL
• Liberar a memória após a utilização com free
8
![Page 69: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/69.jpg)
Regras da alocação dinâmica
• Incluir a biblioteca stdlib.h
• O tamanho gasto por um tipo pode ser obtido com sizeof
• Informar o tamanho a ser reservado para malloc
• Verificar se acabou a memória comparando com NULL
• Liberar a memória após a utilização com free
8
![Page 70: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/70.jpg)
Regras da alocação dinâmica
• Incluir a biblioteca stdlib.h
• O tamanho gasto por um tipo pode ser obtido com sizeof
• Informar o tamanho a ser reservado para malloc
• Verificar se acabou a memória comparando com NULL
• Liberar a memória após a utilização com free
8
![Page 71: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/71.jpg)
Regras da alocação dinâmica
• Incluir a biblioteca stdlib.h
• O tamanho gasto por um tipo pode ser obtido com sizeof
• Informar o tamanho a ser reservado para malloc
• Verificar se acabou a memória comparando com NULL
• Liberar a memória após a utilização com free
8
![Page 72: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/72.jpg)
Regras da alocação dinâmica
• Incluir a biblioteca stdlib.h
• O tamanho gasto por um tipo pode ser obtido com sizeof
• Informar o tamanho a ser reservado para malloc
• Verificar se acabou a memória comparando com NULL
• Liberar a memória após a utilização com free
8
![Page 73: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/73.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo
• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {
5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 74: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/74.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {
5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 75: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/75.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {
5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 76: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/76.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {
5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 77: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/77.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float media, *notas; /* será usado como um vetor */6 int i, n;
7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 78: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/78.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);
8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 79: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/79.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));
9 for (i = 0; i < n; i++)10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 80: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/80.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);
11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 81: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/81.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);
15 free(notas);16 return 0;17 }
9
![Page 82: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/82.jpg)
Ponteiros e vetores• O nome de um vetor é um ponteiro para o início do mesmo• Podemos usar ponteiros como se fossem vetores
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float media, *notas; /* será usado como um vetor */6 int i, n;7 scanf("%d", &n);8 notas = malloc(n * sizeof(float));9 for (i = 0; i < n; i++)
10 scanf("%d", ¬as[i]);11 media = 0;12 for (i = 0; i < n; i++)13 media += notas[i]/n;14 printf("Média: %f\n", media);15 free(notas);16 return 0;17 }
9
![Page 83: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/83.jpg)
Aritmética de ponteiros• Vetores são ponteiros constantes: o endereço para onde
apontam não pode ser alterado
• Podemos realizar operações aritméticas em ponteiros:soma, subtração, incremento e decremento
– O compilador considera o tamanho do tipo apontado– Ex: somar 1 em um ponteiro para int faz com que o
endereço pule sizeof(int) bytes
1 int vetor[5] = {1, 2, 3, 4, 5};2 int *ponteiro;3 ponteiro = vetor + 2;4 ponteiro++;5 printf("%d %d %d", *vetor, *(ponteiro - 1), *ponteiro);
vetor[0]1000
vetor[1]1004
vetor[2]1008
vetor[3]1012
vetor[4]1016
1000vetor
ponteiro-1
1012
ponteiro
10
![Page 84: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/84.jpg)
Aritmética de ponteiros• Vetores são ponteiros constantes: o endereço para onde
apontam não pode ser alterado• Podemos realizar operações aritméticas em ponteiros:
soma, subtração, incremento e decremento
– O compilador considera o tamanho do tipo apontado– Ex: somar 1 em um ponteiro para int faz com que o
endereço pule sizeof(int) bytes
1 int vetor[5] = {1, 2, 3, 4, 5};2 int *ponteiro;3 ponteiro = vetor + 2;4 ponteiro++;5 printf("%d %d %d", *vetor, *(ponteiro - 1), *ponteiro);
vetor[0]1000
vetor[1]1004
vetor[2]1008
vetor[3]1012
vetor[4]1016
1000vetor
ponteiro-1
1012
ponteiro
10
![Page 85: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/85.jpg)
Aritmética de ponteiros• Vetores são ponteiros constantes: o endereço para onde
apontam não pode ser alterado• Podemos realizar operações aritméticas em ponteiros:
soma, subtração, incremento e decremento– O compilador considera o tamanho do tipo apontado
– Ex: somar 1 em um ponteiro para int faz com que oendereço pule sizeof(int) bytes
1 int vetor[5] = {1, 2, 3, 4, 5};2 int *ponteiro;3 ponteiro = vetor + 2;4 ponteiro++;5 printf("%d %d %d", *vetor, *(ponteiro - 1), *ponteiro);
vetor[0]1000
vetor[1]1004
vetor[2]1008
vetor[3]1012
vetor[4]1016
1000vetor
ponteiro-1
1012
ponteiro
10
![Page 86: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/86.jpg)
Aritmética de ponteiros• Vetores são ponteiros constantes: o endereço para onde
apontam não pode ser alterado• Podemos realizar operações aritméticas em ponteiros:
soma, subtração, incremento e decremento– O compilador considera o tamanho do tipo apontado– Ex: somar 1 em um ponteiro para int faz com que o
endereço pule sizeof(int) bytes
1 int vetor[5] = {1, 2, 3, 4, 5};2 int *ponteiro;3 ponteiro = vetor + 2;4 ponteiro++;5 printf("%d %d %d", *vetor, *(ponteiro - 1), *ponteiro);
vetor[0]1000
vetor[1]1004
vetor[2]1008
vetor[3]1012
vetor[4]1016
1000vetor
ponteiro-1
1012
ponteiro
10
![Page 87: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/87.jpg)
Aritmética de ponteiros• Vetores são ponteiros constantes: o endereço para onde
apontam não pode ser alterado• Podemos realizar operações aritméticas em ponteiros:
soma, subtração, incremento e decremento– O compilador considera o tamanho do tipo apontado– Ex: somar 1 em um ponteiro para int faz com que o
endereço pule sizeof(int) bytes
1 int vetor[5] = {1, 2, 3, 4, 5};2 int *ponteiro;3 ponteiro = vetor + 2;4 ponteiro++;5 printf("%d %d %d", *vetor, *(ponteiro - 1), *ponteiro);
vetor[0]1000
vetor[1]1004
vetor[2]1008
vetor[3]1012
vetor[4]1016
1000vetor
ponteiro-1
1012
ponteiro
10
![Page 88: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/88.jpg)
Aritmética de ponteiros• Vetores são ponteiros constantes: o endereço para onde
apontam não pode ser alterado• Podemos realizar operações aritméticas em ponteiros:
soma, subtração, incremento e decremento– O compilador considera o tamanho do tipo apontado– Ex: somar 1 em um ponteiro para int faz com que o
endereço pule sizeof(int) bytes
1 int vetor[5] = {1, 2, 3, 4, 5};2 int *ponteiro;3 ponteiro = vetor + 2;4 ponteiro++;5 printf("%d %d %d", *vetor, *(ponteiro - 1), *ponteiro);
vetor[0]1000
vetor[1]1004
vetor[2]1008
vetor[3]1012
vetor[4]1016
1000vetor
ponteiro-1
1012
ponteiro
10
![Page 89: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/89.jpg)
Exemplo: centroide com malloc
1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 90: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/90.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {
5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 91: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/91.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y,
cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 92: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/92.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;
7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 93: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/93.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);
8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 94: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/94.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));
9 y = malloc(n*sizeof(float));10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 95: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/95.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 96: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/96.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }
14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 97: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/97.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);
16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 98: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/98.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);
22 free(x);23 free(y);24 return 0;25 }
11
![Page 99: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/99.jpg)
Exemplo: centroide com malloc1 #include <stdio.h>2 #include <stdlib.h>34 int main() {5 float *x, *y, cx, cy;6 int i, n;7 scanf("%d", &n);8 x = malloc(n*sizeof(float));9 y = malloc(n*sizeof(float));
10 if (x == NULL || y == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &x[i], &y[i]);16 cx = cy = 0;17 for (i = 0; i < n; i++) {18 cx += x[i]/n;19 cy += y[i]/n;20 }21 printf("%f %f\n", cx, cy);22 free(x);23 free(y);24 return 0;25 }
11
![Page 100: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/100.jpg)
Passagem de parâmetros em CConsidere o seguinte código:
1 void imprime_invertido(int v[10], int n) {2 while(n >= 0) {3 printf("%d ", v[n-1]);4 n--;5 }6 }78 int main() {9 int n = 10, v[10] = {0,1,2,3,4,5,6,7,8,9};
10 imprime_invertido(v, n);11 printf("%d\n", n);12 return 0;13 }
O que é impresso na linha 11?• -1 ou 10?
O valor da variável local n da função main é copiado para oparâmetro (variável local) n da função imprime_invertido
• O valor de n em main não é alterado, continua 10
12
![Page 101: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/101.jpg)
Passagem de parâmetros em CConsidere o seguinte código:
1 void imprime_invertido(int v[10], int n) {2 while(n >= 0) {3 printf("%d ", v[n-1]);4 n--;5 }6 }78 int main() {9 int n = 10, v[10] = {0,1,2,3,4,5,6,7,8,9};
10 imprime_invertido(v, n);11 printf("%d\n", n);12 return 0;13 }
O que é impresso na linha 11?• -1 ou 10?
O valor da variável local n da função main é copiado para oparâmetro (variável local) n da função imprime_invertido
• O valor de n em main não é alterado, continua 10
12
![Page 102: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/102.jpg)
Passagem de parâmetros em CConsidere o seguinte código:
1 void imprime_invertido(int v[10], int n) {2 while(n >= 0) {3 printf("%d ", v[n-1]);4 n--;5 }6 }78 int main() {9 int n = 10, v[10] = {0,1,2,3,4,5,6,7,8,9};
10 imprime_invertido(v, n);11 printf("%d\n", n);12 return 0;13 }
O que é impresso na linha 11?
• -1 ou 10?
O valor da variável local n da função main é copiado para oparâmetro (variável local) n da função imprime_invertido
• O valor de n em main não é alterado, continua 10
12
![Page 103: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/103.jpg)
Passagem de parâmetros em CConsidere o seguinte código:
1 void imprime_invertido(int v[10], int n) {2 while(n >= 0) {3 printf("%d ", v[n-1]);4 n--;5 }6 }78 int main() {9 int n = 10, v[10] = {0,1,2,3,4,5,6,7,8,9};
10 imprime_invertido(v, n);11 printf("%d\n", n);12 return 0;13 }
O que é impresso na linha 11?• -1 ou 10?
O valor da variável local n da função main é copiado para oparâmetro (variável local) n da função imprime_invertido
• O valor de n em main não é alterado, continua 10
12
![Page 104: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/104.jpg)
Passagem de parâmetros em CConsidere o seguinte código:
1 void imprime_invertido(int v[10], int n) {2 while(n >= 0) {3 printf("%d ", v[n-1]);4 n--;5 }6 }78 int main() {9 int n = 10, v[10] = {0,1,2,3,4,5,6,7,8,9};
10 imprime_invertido(v, n);11 printf("%d\n", n);12 return 0;13 }
O que é impresso na linha 11?• -1 ou 10?
O valor da variável local n da função main é copiado para oparâmetro (variável local) n da função imprime_invertido
• O valor de n em main não é alterado, continua 10
12
![Page 105: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/105.jpg)
Passagem de parâmetros em CConsidere o seguinte código:
1 void imprime_invertido(int v[10], int n) {2 while(n >= 0) {3 printf("%d ", v[n-1]);4 n--;5 }6 }78 int main() {9 int n = 10, v[10] = {0,1,2,3,4,5,6,7,8,9};
10 imprime_invertido(v, n);11 printf("%d\n", n);12 return 0;13 }
O que é impresso na linha 11?• -1 ou 10?
O valor da variável local n da função main é copiado para oparâmetro (variável local) n da função imprime_invertido
• O valor de n em main não é alterado, continua 1012
![Page 106: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/106.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n
• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 107: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/107.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 108: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/108.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n
• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 109: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/109.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 110: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/110.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?
1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 111: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/111.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 112: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/112.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:
• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 113: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/113.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia
• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 114: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/114.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função
• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 115: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/115.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia
13
![Page 116: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/116.jpg)
Passagem de parâmetros por cópiaToda passagem de parâmetros em C é feita por cópia
• O valor da variável (ou constante) da chamada da funçãoé copiado para o parâmetro
– imprime_invertido(v, n) não altera o valor de n• Mesmo se variável e parâmetro tiverem o mesmo nome
Mas e se passarmos um vetor?1 void soma_um(int v[10], int n) {2 int i;3 for (i = 0; i < n; i++)4 v[i]++;5 }
Quando passamos um vetor:• na verdade, passamos o endereço do vetor por cópia• ou seja, o conteúdo do vetor não é passado para a função• por isso, mudanças dentro da função afetam o vetor
Toda passagem de parâmetros em C é feita por cópia13
![Page 117: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/117.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros• Passamos um ponteiro para a variável que gostaríamos
de alterar• O valor do ponteiro é passado por cópia• Mas ainda podemos acessar o valor da variável usando *
Exemplo:1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 118: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/118.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros• Passamos um ponteiro para a variável que gostaríamos
de alterar• O valor do ponteiro é passado por cópia• Mas ainda podemos acessar o valor da variável usando *
Exemplo:1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 119: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/119.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros• Passamos um ponteiro para a variável que gostaríamos
de alterar• O valor do ponteiro é passado por cópia• Mas ainda podemos acessar o valor da variável usando *
Exemplo:1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 120: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/120.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros
• Passamos um ponteiro para a variável que gostaríamosde alterar
• O valor do ponteiro é passado por cópia• Mas ainda podemos acessar o valor da variável usando *
Exemplo:1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 121: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/121.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros• Passamos um ponteiro para a variável que gostaríamos
de alterar
• O valor do ponteiro é passado por cópia• Mas ainda podemos acessar o valor da variável usando *
Exemplo:1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 122: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/122.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros• Passamos um ponteiro para a variável que gostaríamos
de alterar• O valor do ponteiro é passado por cópia
• Mas ainda podemos acessar o valor da variável usando *
Exemplo:1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 123: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/123.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros• Passamos um ponteiro para a variável que gostaríamos
de alterar• O valor do ponteiro é passado por cópia• Mas ainda podemos acessar o valor da variável usando *
Exemplo:1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 124: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/124.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros• Passamos um ponteiro para a variável que gostaríamos
de alterar• O valor do ponteiro é passado por cópia• Mas ainda podemos acessar o valor da variável usando *
Exemplo:
1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 125: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/125.jpg)
Passagem por referênciaOutras linguagens permitem passagem por referência
• As alterações feitas na variável dentro da função de fatoalteram o valor da variável usada na chamada da função
• Pode ser mais rápido do que copiar toda a informação
Em C, isso pode ser simulado usando ponteiros• Passamos um ponteiro para a variável que gostaríamos
de alterar• O valor do ponteiro é passado por cópia• Mas ainda podemos acessar o valor da variável usando *
Exemplo:1 void imprime_e_remove_ultimo(int v[10], int *n) {2 printf("%d\n", v[*n - 1]);3 (*n)--;4 }
14
![Page 126: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/126.jpg)
Ponteiros para ponteirosEx: uma matriz é um vetor de vetores
1 int **aloca_matriz(int n, int m) {2 int i, **matriz;3 matriz = malloc(n * sizeof(int *));4 for (i = 0; i < n; i++)5 matriz[i] = malloc(m * sizeof(int));6 return matriz;7 }
Ex: simular passagem por referência de um ponteiro1 void aloca_e_zera(int **v, int n) {2 int i;3 *v = malloc(n * sizeof(int));4 for (i = 0; i < n; i++)5 (*v)[i] = 0;6 }
Solução mais elegante: devolver o ponteiro do novo vetor
Precisa ficar claro qual é o objetivo na hora de programar:• No primeiro caso, temos um vetor de vetores• No segundo caso, queremos alterar um vetor
15
![Page 127: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/127.jpg)
Ponteiros para ponteirosEx: uma matriz é um vetor de vetores
1 int **aloca_matriz(int n, int m) {2 int i, **matriz;3 matriz = malloc(n * sizeof(int *));4 for (i = 0; i < n; i++)5 matriz[i] = malloc(m * sizeof(int));6 return matriz;7 }
Ex: simular passagem por referência de um ponteiro1 void aloca_e_zera(int **v, int n) {2 int i;3 *v = malloc(n * sizeof(int));4 for (i = 0; i < n; i++)5 (*v)[i] = 0;6 }
Solução mais elegante: devolver o ponteiro do novo vetor
Precisa ficar claro qual é o objetivo na hora de programar:• No primeiro caso, temos um vetor de vetores• No segundo caso, queremos alterar um vetor
15
![Page 128: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/128.jpg)
Ponteiros para ponteirosEx: uma matriz é um vetor de vetores
1 int **aloca_matriz(int n, int m) {2 int i, **matriz;3 matriz = malloc(n * sizeof(int *));4 for (i = 0; i < n; i++)5 matriz[i] = malloc(m * sizeof(int));6 return matriz;7 }
Ex: simular passagem por referência de um ponteiro
1 void aloca_e_zera(int **v, int n) {2 int i;3 *v = malloc(n * sizeof(int));4 for (i = 0; i < n; i++)5 (*v)[i] = 0;6 }
Solução mais elegante: devolver o ponteiro do novo vetor
Precisa ficar claro qual é o objetivo na hora de programar:• No primeiro caso, temos um vetor de vetores• No segundo caso, queremos alterar um vetor
15
![Page 129: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/129.jpg)
Ponteiros para ponteirosEx: uma matriz é um vetor de vetores
1 int **aloca_matriz(int n, int m) {2 int i, **matriz;3 matriz = malloc(n * sizeof(int *));4 for (i = 0; i < n; i++)5 matriz[i] = malloc(m * sizeof(int));6 return matriz;7 }
Ex: simular passagem por referência de um ponteiro1 void aloca_e_zera(int **v, int n) {2 int i;3 *v = malloc(n * sizeof(int));4 for (i = 0; i < n; i++)5 (*v)[i] = 0;6 }
Solução mais elegante: devolver o ponteiro do novo vetor
Precisa ficar claro qual é o objetivo na hora de programar:• No primeiro caso, temos um vetor de vetores• No segundo caso, queremos alterar um vetor
15
![Page 130: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/130.jpg)
Ponteiros para ponteirosEx: uma matriz é um vetor de vetores
1 int **aloca_matriz(int n, int m) {2 int i, **matriz;3 matriz = malloc(n * sizeof(int *));4 for (i = 0; i < n; i++)5 matriz[i] = malloc(m * sizeof(int));6 return matriz;7 }
Ex: simular passagem por referência de um ponteiro1 void aloca_e_zera(int **v, int n) {2 int i;3 *v = malloc(n * sizeof(int));4 for (i = 0; i < n; i++)5 (*v)[i] = 0;6 }
Solução mais elegante: devolver o ponteiro do novo vetor
Precisa ficar claro qual é o objetivo na hora de programar:• No primeiro caso, temos um vetor de vetores• No segundo caso, queremos alterar um vetor
15
![Page 131: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/131.jpg)
Ponteiros para ponteirosEx: uma matriz é um vetor de vetores
1 int **aloca_matriz(int n, int m) {2 int i, **matriz;3 matriz = malloc(n * sizeof(int *));4 for (i = 0; i < n; i++)5 matriz[i] = malloc(m * sizeof(int));6 return matriz;7 }
Ex: simular passagem por referência de um ponteiro1 void aloca_e_zera(int **v, int n) {2 int i;3 *v = malloc(n * sizeof(int));4 for (i = 0; i < n; i++)5 (*v)[i] = 0;6 }
Solução mais elegante: devolver o ponteiro do novo vetor
Precisa ficar claro qual é o objetivo na hora de programar:
• No primeiro caso, temos um vetor de vetores• No segundo caso, queremos alterar um vetor
15
![Page 132: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/132.jpg)
Ponteiros para ponteirosEx: uma matriz é um vetor de vetores
1 int **aloca_matriz(int n, int m) {2 int i, **matriz;3 matriz = malloc(n * sizeof(int *));4 for (i = 0; i < n; i++)5 matriz[i] = malloc(m * sizeof(int));6 return matriz;7 }
Ex: simular passagem por referência de um ponteiro1 void aloca_e_zera(int **v, int n) {2 int i;3 *v = malloc(n * sizeof(int));4 for (i = 0; i < n; i++)5 (*v)[i] = 0;6 }
Solução mais elegante: devolver o ponteiro do novo vetor
Precisa ficar claro qual é o objetivo na hora de programar:• No primeiro caso, temos um vetor de vetores
• No segundo caso, queremos alterar um vetor
15
![Page 133: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/133.jpg)
Ponteiros para ponteirosEx: uma matriz é um vetor de vetores
1 int **aloca_matriz(int n, int m) {2 int i, **matriz;3 matriz = malloc(n * sizeof(int *));4 for (i = 0; i < n; i++)5 matriz[i] = malloc(m * sizeof(int));6 return matriz;7 }
Ex: simular passagem por referência de um ponteiro1 void aloca_e_zera(int **v, int n) {2 int i;3 *v = malloc(n * sizeof(int));4 for (i = 0; i < n; i++)5 (*v)[i] = 0;6 }
Solução mais elegante: devolver o ponteiro do novo vetor
Precisa ficar claro qual é o objetivo na hora de programar:• No primeiro caso, temos um vetor de vetores• No segundo caso, queremos alterar um vetor
15
![Page 134: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/134.jpg)
Registro
Registro é uma coleção de variáveis relacionadas de váriostipos, organizadas em uma única estrutura e referenciadas porum nome comum
Características:• Cada variável é chamada de membro do registro• Cada membro é acessado por um nome na estrutura• Cada estrutura define um novo tipo, com as mesmas
características de um tipo padrão da linguagem
16
![Page 135: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/135.jpg)
Registro
Registro é uma coleção de variáveis relacionadas de váriostipos, organizadas em uma única estrutura e referenciadas porum nome comum
Características:
• Cada variável é chamada de membro do registro• Cada membro é acessado por um nome na estrutura• Cada estrutura define um novo tipo, com as mesmas
características de um tipo padrão da linguagem
16
![Page 136: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/136.jpg)
Registro
Registro é uma coleção de variáveis relacionadas de váriostipos, organizadas em uma única estrutura e referenciadas porum nome comum
Características:• Cada variável é chamada de membro do registro
• Cada membro é acessado por um nome na estrutura• Cada estrutura define um novo tipo, com as mesmas
características de um tipo padrão da linguagem
16
![Page 137: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/137.jpg)
Registro
Registro é uma coleção de variáveis relacionadas de váriostipos, organizadas em uma única estrutura e referenciadas porum nome comum
Características:• Cada variável é chamada de membro do registro• Cada membro é acessado por um nome na estrutura
• Cada estrutura define um novo tipo, com as mesmascaracterísticas de um tipo padrão da linguagem
16
![Page 138: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/138.jpg)
Registro
Registro é uma coleção de variáveis relacionadas de váriostipos, organizadas em uma única estrutura e referenciadas porum nome comum
Características:• Cada variável é chamada de membro do registro• Cada membro é acessado por um nome na estrutura• Cada estrutura define um novo tipo, com as mesmas
características de um tipo padrão da linguagem
16
![Page 139: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/139.jpg)
Declaração de estruturas e registros
Declarando uma estrutura com N membros
1 struct identificador {2 tipo1 membro1;3 tipo2 membro2;4 ...5 tipoN membroN;6 }
Declarando um registrostruct identificador nome_registro;
Em C:• Declaramos um tipo de uma estrutura apenas uma vez• Podemos declarar vários registros da mesma estrutura
17
![Page 140: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/140.jpg)
Declaração de estruturas e registros
Declarando uma estrutura com N membros
1 struct identificador {2 tipo1 membro1;3 tipo2 membro2;4 ...5 tipoN membroN;6 }
Declarando um registrostruct identificador nome_registro;
Em C:• Declaramos um tipo de uma estrutura apenas uma vez• Podemos declarar vários registros da mesma estrutura
17
![Page 141: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/141.jpg)
Declaração de estruturas e registros
Declarando uma estrutura com N membros
1 struct identificador {2 tipo1 membro1;3 tipo2 membro2;4 ...5 tipoN membroN;6 }
Declarando um registrostruct identificador nome_registro;
Em C:• Declaramos um tipo de uma estrutura apenas uma vez• Podemos declarar vários registros da mesma estrutura
17
![Page 142: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/142.jpg)
Declaração de estruturas e registros
Declarando uma estrutura com N membros
1 struct identificador {2 tipo1 membro1;3 tipo2 membro2;4 ...5 tipoN membroN;6 }
Declarando um registro
struct identificador nome_registro;
Em C:• Declaramos um tipo de uma estrutura apenas uma vez• Podemos declarar vários registros da mesma estrutura
17
![Page 143: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/143.jpg)
Declaração de estruturas e registros
Declarando uma estrutura com N membros
1 struct identificador {2 tipo1 membro1;3 tipo2 membro2;4 ...5 tipoN membroN;6 }
Declarando um registrostruct identificador nome_registro;
Em C:• Declaramos um tipo de uma estrutura apenas uma vez• Podemos declarar vários registros da mesma estrutura
17
![Page 144: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/144.jpg)
Declaração de estruturas e registros
Declarando uma estrutura com N membros
1 struct identificador {2 tipo1 membro1;3 tipo2 membro2;4 ...5 tipoN membroN;6 }
Declarando um registrostruct identificador nome_registro;
Em C:
• Declaramos um tipo de uma estrutura apenas uma vez• Podemos declarar vários registros da mesma estrutura
17
![Page 145: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/145.jpg)
Declaração de estruturas e registros
Declarando uma estrutura com N membros
1 struct identificador {2 tipo1 membro1;3 tipo2 membro2;4 ...5 tipoN membroN;6 }
Declarando um registrostruct identificador nome_registro;
Em C:• Declaramos um tipo de uma estrutura apenas uma vez
• Podemos declarar vários registros da mesma estrutura
17
![Page 146: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/146.jpg)
Declaração de estruturas e registros
Declarando uma estrutura com N membros
1 struct identificador {2 tipo1 membro1;3 tipo2 membro2;4 ...5 tipoN membroN;6 }
Declarando um registrostruct identificador nome_registro;
Em C:• Declaramos um tipo de uma estrutura apenas uma vez• Podemos declarar vários registros da mesma estrutura
17
![Page 147: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/147.jpg)
Exemplo de estrutura
Ficha de dados cadastrais de um aluno
1 struct data {2 int dia;3 int mes;4 int ano;5 };67 struct ficha_aluno {8 int ra;9 int telefone;
10 char nome[30];11 char endereco[100];12 struct data nascimento;13 };
Ou seja, podemos estruturas aninhadas
18
![Page 148: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/148.jpg)
Exemplo de estrutura
Ficha de dados cadastrais de um aluno
1 struct data {2 int dia;3 int mes;4 int ano;5 };67 struct ficha_aluno {8 int ra;9 int telefone;
10 char nome[30];11 char endereco[100];12 struct data nascimento;13 };
Ou seja, podemos estruturas aninhadas
18
![Page 149: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/149.jpg)
Exemplo de estrutura
Ficha de dados cadastrais de um aluno
1 struct data {2 int dia;3 int mes;4 int ano;5 };67 struct ficha_aluno {8 int ra;9 int telefone;
10 char nome[30];11 char endereco[100];12 struct data nascimento;13 };
Ou seja, podemos estruturas aninhadas
18
![Page 150: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/150.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 151: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/151.jpg)
Usando um registroAcessando um membro do registro
• registro.membro
• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 152: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/152.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 153: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/153.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 154: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/154.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno
1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 155: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/155.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 156: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/156.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário
1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 157: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/157.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 158: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/158.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno
1 aluno1 = aluno2;
19
![Page 159: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/159.jpg)
Usando um registroAcessando um membro do registro
• registro.membro• ponteiro_registro->membro
– o mesmo que (*ponteiro_registro).membro
Imprimindo o nome de um aluno1 struct ficha_aluno aluno;2 struct ficha_aluno *ponteiro_aluno;3 ...4 printf("Aluno: %s\n", aluno.nome);5 printf("Outro aluno: %s\n", ponteiro_aluno->nome);
Imprimindo o aniversário1 struct ficha_aluno aluno;2 ...3 printf("Aniversario: %d/%d\n", aluno.nascimento.dia,4 aluno.nascimento.mes);
Copiando um aluno1 aluno1 = aluno2;
19
![Page 160: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/160.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;
45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 161: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/161.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;
7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 162: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/162.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);
9 v = malloc(n * sizeof(ponto));10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 163: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/163.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 164: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/164.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }
14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 165: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/165.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);
16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 166: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/166.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;
17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 167: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/167.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }
21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 168: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/168.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);
22 free(v);23 return 0;24 }
20
![Page 169: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/169.jpg)
Centroide revisitado1 typedef struct ponto {2 float x, y;3 } ponto;45 int main() {6 ponto *v, centroide;7 int i, n;8 scanf("%d", &n);9 v = malloc(n * sizeof(ponto));
10 if (v == NULL) {11 printf("Não há mais memória\n");12 exit(1);13 }14 for (i = 0; i < n; i++)15 scanf("%f %f", &v[i].x, &v[i].y);16 centroide.x = centroide.y = 0;17 for (i = 0; i < n; i++) {18 centroide.x += v[i].x/n;19 centroide.y += v[i].y/n;20 }21 printf("%f %f\n", centroide.x, centroide.y);22 free(v);23 return 0;24 }
20
![Page 170: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/170.jpg)
Reflexão
Quando somamos 2 variáveis float:
• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 171: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/171.jpg)
Reflexão
Quando somamos 2 variáveis float:• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 172: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/172.jpg)
Reflexão
Quando somamos 2 variáveis float:• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 173: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/173.jpg)
Reflexão
Quando somamos 2 variáveis float:• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 174: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/174.jpg)
Reflexão
Quando somamos 2 variáveis float:• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 175: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/175.jpg)
Reflexão
Quando somamos 2 variáveis float:• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:
• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 176: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/176.jpg)
Reflexão
Quando somamos 2 variáveis float:• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 177: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/177.jpg)
Reflexão
Quando somamos 2 variáveis float:• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?
• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 178: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/178.jpg)
Reflexão
Quando somamos 2 variáveis float:• não nos preocupamos como a operação é feita
– mesmo internamente o float sendo representado por umnúmero binário
– Ex: 0.3 é representado como00111110100110011001100110011010
• o compilador esconde os detalhes!
Quando lemos, imprimimos ou somamos 2 pontos:• nos preocupamos com os detalhes
Será que também podemos abstrair um ponto?• Sim! Usando registros, funções e um pouco de cuidado
21
![Page 179: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/179.jpg)
Tipo Abstrato de Dados
Um conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD
– Consiste dos nomes e demais convenções usadas paraexecutar cada operação
• Implementação: conjunto de algoritmos que realiza asoperações
– A implementação é o único “lugar” que uma variável éacessada diretamente
• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 180: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/180.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD
– Consiste dos nomes e demais convenções usadas paraexecutar cada operação
• Implementação: conjunto de algoritmos que realiza asoperações
– A implementação é o único “lugar” que uma variável éacessada diretamente
• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 181: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/181.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD
– Consiste dos nomes e demais convenções usadas paraexecutar cada operação
• Implementação: conjunto de algoritmos que realiza asoperações
– A implementação é o único “lugar” que uma variável éacessada diretamente
• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 182: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/182.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD– Consiste dos nomes e demais convenções usadas para
executar cada operação
• Implementação: conjunto de algoritmos que realiza asoperações
– A implementação é o único “lugar” que uma variável éacessada diretamente
• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 183: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/183.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD– Consiste dos nomes e demais convenções usadas para
executar cada operação• Implementação: conjunto de algoritmos que realiza as
operações
– A implementação é o único “lugar” que uma variável éacessada diretamente
• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 184: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/184.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD– Consiste dos nomes e demais convenções usadas para
executar cada operação• Implementação: conjunto de algoritmos que realiza as
operações– A implementação é o único “lugar” que uma variável é
acessada diretamente
• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 185: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/185.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD– Consiste dos nomes e demais convenções usadas para
executar cada operação• Implementação: conjunto de algoritmos que realiza as
operações– A implementação é o único “lugar” que uma variável é
acessada diretamente• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 186: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/186.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD– Consiste dos nomes e demais convenções usadas para
executar cada operação• Implementação: conjunto de algoritmos que realiza as
operações– A implementação é o único “lugar” que uma variável é
acessada diretamente• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 187: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/187.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD– Consiste dos nomes e demais convenções usadas para
executar cada operação• Implementação: conjunto de algoritmos que realiza as
operações– A implementação é o único “lugar” que uma variável é
acessada diretamente• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:
• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 188: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/188.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD– Consiste dos nomes e demais convenções usadas para
executar cada operação• Implementação: conjunto de algoritmos que realiza as
operações– A implementação é o único “lugar” que uma variável é
acessada diretamente• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)
• a interface é um conjunto de protótipos de funções quemanipula o registro
22
![Page 189: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/189.jpg)
Tipo Abstrato de DadosUm conjunto de valores associado a um conjunto deoperações permitidas nesses dados
• Interface: conjunto de operações de uma TAD– Consiste dos nomes e demais convenções usadas para
executar cada operação• Implementação: conjunto de algoritmos que realiza as
operações– A implementação é o único “lugar” que uma variável é
acessada diretamente• Cliente: código que utiliza/chama uma operação
– O cliente nunca acessa a variável diretamente
Em C:• um TAD é declarado como um registro (struct)• a interface é um conjunto de protótipos de funções que
manipula o registro
22
![Page 190: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/190.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #ifndef RETANGULO_H_2 #define RETANGULO_H_
34 typedef struct {5 char cor[10];6 float largura, altura;7 } Retangulo;89 // aloca memória e inicializa
10 Retangulo *criar_retangulo();1112 float altura_retangulo(Retangulo *ret);13 float largura_retangulo(Retangulo *ret);14 float area_retangulo(Retangulo *ret);15 void ler_retangulo(Retangulo *ret);16 void girar_retangulo(Retangulo *ret);1718 // finaliza e libera memória19 void destruir_retangulo(Retangulo *ret);2021 #endif /* RETANGULO_H_ */
Interface: retangulo.h
23
![Page 191: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/191.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #ifndef RETANGULO_H_2 #define RETANGULO_H_
34 typedef struct {5 char cor[10];6 float largura, altura;7 } Retangulo;89 // aloca memória e inicializa
10 Retangulo *criar_retangulo();1112 float altura_retangulo(Retangulo *ret);13 float largura_retangulo(Retangulo *ret);14 float area_retangulo(Retangulo *ret);15 void ler_retangulo(Retangulo *ret);16 void girar_retangulo(Retangulo *ret);1718 // finaliza e libera memória19 void destruir_retangulo(Retangulo *ret);2021 #endif /* RETANGULO_H_ */
Interface: retangulo.h
23
![Page 192: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/192.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #ifndef RETANGULO_H_2 #define RETANGULO_H_
34 typedef struct {5 char cor[10];6 float largura, altura;7 } Retangulo;89 // aloca memória e inicializa
10 Retangulo *criar_retangulo();1112 float altura_retangulo(Retangulo *ret);13 float largura_retangulo(Retangulo *ret);14 float area_retangulo(Retangulo *ret);15 void ler_retangulo(Retangulo *ret);16 void girar_retangulo(Retangulo *ret);1718 // finaliza e libera memória19 void destruir_retangulo(Retangulo *ret);2021 #endif /* RETANGULO_H_ */
Interface: retangulo.h
23
![Page 193: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/193.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #ifndef RETANGULO_H_2 #define RETANGULO_H_34 typedef struct {5 char cor[10];6 float largura, altura;7 } Retangulo;
89 // aloca memória e inicializa
10 Retangulo *criar_retangulo();1112 float altura_retangulo(Retangulo *ret);13 float largura_retangulo(Retangulo *ret);14 float area_retangulo(Retangulo *ret);15 void ler_retangulo(Retangulo *ret);16 void girar_retangulo(Retangulo *ret);1718 // finaliza e libera memória19 void destruir_retangulo(Retangulo *ret);2021 #endif /* RETANGULO_H_ */
Interface: retangulo.h
23
![Page 194: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/194.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #ifndef RETANGULO_H_2 #define RETANGULO_H_34 typedef struct {5 char cor[10];6 float largura, altura;7 } Retangulo;89 // aloca memória e inicializa
10 Retangulo *criar_retangulo();1112 float altura_retangulo(Retangulo *ret);13 float largura_retangulo(Retangulo *ret);14 float area_retangulo(Retangulo *ret);15 void ler_retangulo(Retangulo *ret);16 void girar_retangulo(Retangulo *ret);1718 // finaliza e libera memória19 void destruir_retangulo(Retangulo *ret);20
21 #endif /* RETANGULO_H_ */
Interface: retangulo.h
23
![Page 195: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/195.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #ifndef RETANGULO_H_2 #define RETANGULO_H_34 typedef struct {5 char cor[10];6 float largura, altura;7 } Retangulo;89 // aloca memória e inicializa
10 Retangulo *criar_retangulo();1112 float altura_retangulo(Retangulo *ret);13 float largura_retangulo(Retangulo *ret);14 float area_retangulo(Retangulo *ret);15 void ler_retangulo(Retangulo *ret);16 void girar_retangulo(Retangulo *ret);1718 // finaliza e libera memória19 void destruir_retangulo(Retangulo *ret);2021 #endif /* RETANGULO_H_ */
Interface: retangulo.h
23
![Page 196: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/196.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"
23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 197: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/197.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"
23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 198: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/198.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"
23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 199: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/199.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"23 Retangulo *criar_retangulo() {
4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 200: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/200.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));
5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 201: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/201.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }
9 r->largura = r->altura = 0; // retângulo vazio10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 202: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/202.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 203: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/203.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }
1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 204: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/204.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }
1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 205: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/205.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...18
19 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 206: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/206.jpg)
Um exemplo concreto: retânguloCriar 2 arquivos: a interface e a implementação
1 #include "retangulo.h"23 Retangulo *criar_retangulo() {4 Retangulo *r = malloc(sizeof(Retangulo));5 if (r == NULL) {6 printf("Faltou memória\n");7 exit(1);8 }9 r->largura = r->altura = 0; // retângulo vazio
10 return r;11 }1213 float area_retangulo(Retangulo *r) {14 return r->largura * r->altura;15 }1617 ...1819 void destruir_retangulo(Retangulo *r) {20 free(r);21 }
Implementação: retangulo.c
24
![Page 207: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/207.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>
2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 208: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/208.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>
2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 209: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/209.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"
34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 210: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/210.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;
6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 211: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/211.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;
7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 212: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/212.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();
8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 213: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/213.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);
910 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 214: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/214.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);
11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 215: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/215.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);
12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 216: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/216.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);
1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 217: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/217.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }17
18 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 218: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/218.jpg)
Um exemplo concreto: retânguloUsando o TAD no cliente
1 #include <stdio.h>2 #include "retangulo.h"34 int main() {5 float area1, area2;6 Retangulo *r;7 r = criar_retangulo();8 ler_retangulo(r);9
10 area1 = area_retangulo(r);11 girar_retangulo(r);12 area2 = area_retangulo(r);1314 if (area1 != area2) {15 printf("A implementação está incorreta!\n");16 }1718 destruir_retangulo(r);19 return 0;20 }
Implementação: cliente.c
25
![Page 219: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/219.jpg)
Exercício 1
Quando um programa inicia, ele é carregado pelo sistemaoperacional na memória. Pesquise como essa memória éorganizada e responda:
• Quais são as principais partes da memória?• Em que partes são armazenadas: variáveis locais,
variáveis estáticas, strings constantes, númerosconstantes no programa, variáveis alocadas com malloc,comandos?
26
![Page 220: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/220.jpg)
Exercício 1
Quando um programa inicia, ele é carregado pelo sistemaoperacional na memória. Pesquise como essa memória éorganizada e responda:
• Quais são as principais partes da memória?
• Em que partes são armazenadas: variáveis locais,variáveis estáticas, strings constantes, númerosconstantes no programa, variáveis alocadas com malloc,comandos?
26
![Page 221: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/221.jpg)
Exercício 1
Quando um programa inicia, ele é carregado pelo sistemaoperacional na memória. Pesquise como essa memória éorganizada e responda:
• Quais são as principais partes da memória?• Em que partes são armazenadas: variáveis locais,
variáveis estáticas, strings constantes, númerosconstantes no programa, variáveis alocadas com malloc,comandos?
26
![Page 222: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/222.jpg)
Exercício 2
Reflita e responda:
• Qual a diferença entre passagem por valor e referência?• Quando é vantajoso em passar registros (struct) por
referências?• E quando é melhor usar passagem por valores?
27
![Page 223: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/223.jpg)
Exercício 2
Reflita e responda:• Qual a diferença entre passagem por valor e referência?
• Quando é vantajoso em passar registros (struct) porreferências?
• E quando é melhor usar passagem por valores?
27
![Page 224: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/224.jpg)
Exercício 2
Reflita e responda:• Qual a diferença entre passagem por valor e referência?• Quando é vantajoso em passar registros (struct) por
referências?
• E quando é melhor usar passagem por valores?
27
![Page 225: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/225.jpg)
Exercício 2
Reflita e responda:• Qual a diferença entre passagem por valor e referência?• Quando é vantajoso em passar registros (struct) por
referências?• E quando é melhor usar passagem por valores?
27
![Page 226: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/226.jpg)
Exercício 3
Outra maneira de armazenar um conjunto de pontos é salvartodas as coordenadas em uma matriz. Assim, cada ponto érepresentado por uma linha.
1. Reescreva o programa que calcula o centroide com aideia acima
– Utilize alocação dinâmica de memória em seu programa
2. Modifique o programa do item anterior para utilizar umvetor ao invés de uma matriz
– Dica: utilize linearização dos indícies da matriz
28
![Page 227: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/227.jpg)
Exercício 3
Outra maneira de armazenar um conjunto de pontos é salvartodas as coordenadas em uma matriz. Assim, cada ponto érepresentado por uma linha.
1. Reescreva o programa que calcula o centroide com aideia acima
– Utilize alocação dinâmica de memória em seu programa2. Modifique o programa do item anterior para utilizar um
vetor ao invés de uma matriz
– Dica: utilize linearização dos indícies da matriz
28
![Page 228: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/228.jpg)
Exercício 3
Outra maneira de armazenar um conjunto de pontos é salvartodas as coordenadas em uma matriz. Assim, cada ponto érepresentado por uma linha.
1. Reescreva o programa que calcula o centroide com aideia acima
– Utilize alocação dinâmica de memória em seu programa
2. Modifique o programa do item anterior para utilizar umvetor ao invés de uma matriz
– Dica: utilize linearização dos indícies da matriz
28
![Page 229: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/229.jpg)
Exercício 3
Outra maneira de armazenar um conjunto de pontos é salvartodas as coordenadas em uma matriz. Assim, cada ponto érepresentado por uma linha.
1. Reescreva o programa que calcula o centroide com aideia acima
– Utilize alocação dinâmica de memória em seu programa2. Modifique o programa do item anterior para utilizar um
vetor ao invés de uma matriz
– Dica: utilize linearização dos indícies da matriz
28
![Page 230: MC-202 — Unidade 2 Revisão: Ponteiros, Alocação Dinâmica e ...€¦ · Ponteiros Toda informação usada pelo programa está em algum lugar • Toda variável tem umendereço](https://reader034.vdocuments.pub/reader034/viewer/2022051510/5ffe1ea17d9bcc681f2687c3/html5/thumbnails/230.jpg)
Exercício 3
Outra maneira de armazenar um conjunto de pontos é salvartodas as coordenadas em uma matriz. Assim, cada ponto érepresentado por uma linha.
1. Reescreva o programa que calcula o centroide com aideia acima
– Utilize alocação dinâmica de memória em seu programa2. Modifique o programa do item anterior para utilizar um
vetor ao invés de uma matriz– Dica: utilize linearização dos indícies da matriz
28