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.