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.
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 bytesint 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.