Considere o programa escrito em linguagem C:Assinale a alter...
Considere o programa escrito em linguagem C:
Assinale a alternativa que corresponde ao resultado que será impresso.
Comentários
Veja os comentários dos nossos alunos
Explicando simplificadamente:
O vetor[][3] significa que eu irei dividir o meu vetor a cada 3 elementos do vetor.
vetor[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
equivale
vetor[4][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}
Ou seja uma matriz 4X3:
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
|10|11|12|
A pegadinha está nas operações matemáticas dentro dos parênteses.
Se o parêntese procede um * ou **, significa que tudo entre parênteses é relacionado a endereço de memória:
1) Caso o vetor tenha os dois índices, como vetor[x][y] (x é "linha" e y é "coluna"), não necessita de *.
2) Caso o vetor tenha somente um índice, como vetor[x], é necessário um * para acessar o endereço que falta, que é de [y], sendo equivalente *(vetor[x]) = vetor[x][0].
3) Caso o vetor não tenha nenhum índice, como vetor, é necessário dois * para acessar os dois endereços que faltam, que são [x] e [y], sendo equivalente **(vetor) = vetor[0][0].
4) Como um vetor é um ponteiro, sempre que um índice não é especificado, o * utilizado fará referência ao primeiro elemento [0] do endereço faltante.
5) pegadinha: tudo o que estiver dentro de *() ou **(), está somando ou subtraindo o endereço de referência.
Fica melhor se imaginar não uma matriz, mas sim um vetor dividido em subvetores que possuem n elementos, sendo n=colunas, caso fosse uma matriz.
Ex.: A[][3] = {{12, 34, 56}, {65,43, 21}}, ou seja, é um vetor A que possui 6 elementos, e a cada 3 elementos, ele forma um subvetor ou subconjunto.
Ex.2: então tomando como exemplo o vetor A, a seguinte operação *(vetor[0]+4) = vetor[1][1] = 43. vai soma a cada elemento.
Ex.3: **(vetor+1) = vetor[1][0] = 65. vai somando a cada subvetor, por "linha".
QUESTÃO:
No valor, o operador *(vetor[1]+1), busca o valor dentro do endereço do ponteiro "vetor[1][0]" (linha 2 e coluna 1) e soma com o valor 1 para o próximo elemento do vetor, que é 5, que se encontram no segundo subvetor = {4,5,6}.
No valor, o operador **(vetor+3), busca o valor dentro do endereço do ponteiro "vetor[0][0]" (linha 1 e coluna 1) e soma com o valor 3 para o próximo subvetoro do vetor, que possui o seu primeiro elemento respectivo, sendo linha 4 e coluna 1, que é 10, pertencente ao quarto subvetor = {10,11,12}.
logo, *(vetor[1]+1)+**(vetor+3) = 5 + 10 = 15.
Complementando:
O vetor[][3] significa que eu irei dividir o meu vetor a cada 3 elementos do vetor.
vetor[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
equivale
vetor[4][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}
Ou seja uma matriz 4X3:
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
|10|11|12|
QUESTÃO:
No valor, o operador *(vetor[1]+1), busca o valor dentro do endereço do ponteiro "vetor[1][0]" (linha 2 e coluna 1, que se encontra no subvetor {"4",5,6}) e soma com o valor 1 (4+1=5), que corresponde ao número 5.
No valor, o operador **(vetor+3), busca o valor dentro do endereço do ponteiro "vetor[0][0]" (linha 1 e coluna 1, que está no subvetor {"1",2,3}) e soma com o valor 3 (3+1=4), esse 4 corresponde a linha 4 e coluna 1, que se encontra no subvetor {"10",11,12}, e corresponde ao número 10.
Logo, *(vetor[1]+1)+**(vetor+3) = 5 + 10 = 15.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo