Eu sei a resposta, mas não consigo escrever claramente.
| "abacate" | "banana" | "laranja" | "uva" |
| • | • | • | • |
"abacate" "banana" "laranja" "uva"
válido. Cabe ao programador evitar bobagens.
v = malloc (99 * sizeof (int)); v[111] = 0;
void imprime (char *v, int n) {
char *c;
for (c = v; c < v + n; c++)
printf ("%c", *c);
}
v = malloc (n * sizeof (int)); ... w = realloc (v, 2*n * sizeof (int));
automáticas) versus variáveis alocadas por malloc.
int funcao (void) {
int local;
int p;
p = malloc (10 * sizeof (int));
// p aponta um vetor não-local
...
}
Tempo de vidadas variáveis.
stackda memória: reservada para variáveis locais.
heapda memória: reservada para malloc.
celula *acrescentaCabeca (celula *lista) {
celula cabeca;
cabeca.prox = lista;
return &cabeca;
}
int *primos (void) {
int v[3];
v[0] = 1009; v[1] = 1013; v[2] = 1019;
return v;
}
| Iterativa | Recursiva |
|---|---|
| dinâmica em movimento | estática parada |
| invariantes explicam o que acontece | não há invariantes |
ferramentas)
bibliotecas de funções. Cada arquivo xxx.c é um módulo do programa.