Considere o programa escrito em linguagem C:Assinale a alter...

Próximas questões
Com base no mesmo assunto
Q947307 Programação

Considere o programa escrito em linguagem C:

Imagem associada para resolução da questão

Assinale a alternativa que corresponde ao resultado que será impresso.

Alternativas

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