Aula 21: Quiz (Vetores)

Teste seu entendimento sobre indexação de vetores, sizeof e acesso fora dos limites.

Questão 1 — Inicialização de vetor

int a[5] = {10, 20, 30, 40, 50};
printf("%d\n", a[2]);

O que isso imprime?

20
30
10
Erro de compilação
Explicação: Os índices de vetor começam em 0. a[0]=10, a[1]=20, a[2]=30.

Questão 2 — Número de elementos

int a[] = {3, 1, 4, 1, 5, 9};
printf("%lu\n", sizeof(a) / sizeof(a[0]));

O que isso imprime?

4
6
24
1
Explicação: sizeof(a) é o tamanho total do vetor em bytes (24). sizeof(a[0]) é o tamanho de um elemento (4).
24 / 4 = 6. Esse é o idiom clássico para obter o tamanho de um vetor.

Questão 3 — Acesso fora dos limites

int a[3] = {10, 20, 30};
printf("%d\n", a[3]);

O que acontece?

0
30
Erro de compilação
Comportamento indefinido (valor lixo)
Explicação: a[3] está fora do intervalo (índices válidos vão de a[0] a a[2]).
O C não sinaliza erro de compilação, mas a leitura é comportamento indefinido — qualquer coisa pode acontecer, e é uma fonte clássica de bugs de segurança.

Questão 4 — Soma com laço for

int a[4] = {2, 4, 6, 8};
int sum = 0;
for (int i = 0; i < 4; i++) {
    sum += a[i];
}
printf("sum = %d\n", sum);

O que isso imprime?

sum = 16
sum = 20
sum = 10
sum = 8
Explicação: 2+4+6+8 = 20. Esse é o padrão usual para somar todos os elementos de um vetor com um laço for.

Questão 5 — Inicialização parcial

int a[5] = {1, 2};
printf("%d %d %d\n", a[0], a[2], a[4]);

O que isso imprime?

1 2 (indeterminado)
1 0 0
Erro de compilação
1 1 1
Explicação: Quando a lista de inicialização é mais curta que o tamanho do vetor, os elementos restantes são preenchidos com zero.
  • a[0]=1, a[1]=2 (definidos explicitamente)
  • a[2], a[3], a[4] são automaticamente 0
Por isso o idiom int a[5] = {0}; também inicializa todos os elementos com zero.

Questão 6 — Acessando um vetor 2D

int m[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};
printf("%d\n", m[1][2]);

O que isso imprime?

3
5
6
2
Explicação: m[linha][coluna] usa indexação baseada em 0 para ambas as dimensões.
  • m[0] = {1, 2, 3} (primeira linha)
  • m[1] = {4, 5, 6} (segunda linha)
  • m[1][2] = o terceiro elemento da segunda linha = 6
Ajuda imaginar o vetor como uma matriz.

Questão 7 — Modificando um vetor

int a[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
    a[i] *= 2;
}
printf("%d\n", a[3]);

O que isso imprime?

4
8
6
10
Explicação: O laço dobra cada elemento.
  • Original: {1, 2, 3, 4, 5}
  • Depois de dobrar: {2, 4, 6, 8, 10}
  • a[3] = 4 × 2 = 8
Você pode modificar qualquer elemento do vetor com a[i] = valor.

Questão 8 — sizeof retorna o total de bytes

// Supondo que int tenha 4 bytes
int a[10];
printf("%lu\n", sizeof(a));

O que isso imprime?

10
40
4
8
Explicação: sizeof(vetor) retorna o tamanho total em bytes do vetor.
  • Tamanho de um elemento: sizeof(int) = 4 bytes
  • Número de elementos: 10
  • Total: 4 × 10 = 40 bytes
Nota: quando você passa um vetor para uma função, ele "decai" para um ponteiro, de forma que sizeof retorna o tamanho do ponteiro (tipicamente 8). Se você precisar da contagem de elementos dentro da função, passe-a como argumento separado.

Questão 9 — Nome do vetor e ponteiro

int a[3] = {10, 20, 30};
printf("%d\n", *a);

O que isso imprime?

10
30
Um valor de endereço
Erro de compilação
Explicação: Dentro de uma expressão, o nome de um vetor é tratado como um ponteiro para seu primeiro elemento.
  • a é equivalente a &a[0] (o endereço do primeiro elemento)
  • *a é equivalente a a[0] (o valor do primeiro elemento)
  • Portanto *a = 10
Essa relação também é a base da aritmética de ponteiros: *(a+i) e a[i] significam a mesma coisa.

Resultado

Responda todas as questões para ver sua pontuação.
Início