Questão 38 [FU] Dado o seguinte programa escrito em C:
#include <stdio.h>
int main(void){
int n[] = {7, 8, 9};
int *p;
p = &n[0];
p++;
printf("Valor: %d ", *p);
(*p)++;
printf("Valor: %d\n", *p);
}
Qual é a resposta que será impressa na tela:
a) Valor: 7 Valor : 8
b) Valor: 7 Valor: 7
c) Valor: 8 Valor: 9
d) Valor: 7 Valor: 9
e) Valor: 9 Valor: 9
Gabarito: c (Selecione o texto a esquerda para ver a resposta ou consulte o fim do post).
Explicação: As primeiras linhas de código são totalmente normais, vamos focar nas atribuições e incrementos.
Instruçao: p = &n[0];
Atribui ao ponteiro p a primeira posição do vetor n, então p aponta para n[0]. Neste momento *p vale 7.
Instruçao: p++;
Incrementa a posição do ponteiro, ou seja, ele agora aponta para n[1]. Neste momento *p vale 8.
Instrução: printf("Valor: %d ", *p);
Imprime o conteúdo da posição de memória que p está apontando (n[1]), ou seja, imprime 8.
Instruçao: (*p)++;
Incrementa o conteúdo da posição apontada pelo ponteiro p, ou seja, ele agora aponta para n[1] e n[1] vale 9. Neste momento *p vale 9.
Instrução: printf("Valor: %d\n", *p);
Imprime o conteúdo da posição de memória que p está apontando (n[1]), ou seja, imprime 9.
Então teremos como saída 8 e depois 9.
Não concorda?
Comente, opine e demonstre seu conhecimento!
Gabarito: c
#include <stdio.h>
int main(void){
int n[] = {7, 8, 9};
int *p;
p = &n[0];
p++;
printf("Valor: %d ", *p);
(*p)++;
printf("Valor: %d\n", *p);
}
Qual é a resposta que será impressa na tela:
a) Valor: 7 Valor : 8
b) Valor: 7 Valor: 7
c) Valor: 8 Valor: 9
d) Valor: 7 Valor: 9
e) Valor: 9 Valor: 9
Gabarito: c (Selecione o texto a esquerda para ver a resposta ou consulte o fim do post).
Explicação: As primeiras linhas de código são totalmente normais, vamos focar nas atribuições e incrementos.
Instruçao: p = &n[0];
Atribui ao ponteiro p a primeira posição do vetor n, então p aponta para n[0]. Neste momento *p vale 7.
Instruçao: p++;
Incrementa a posição do ponteiro, ou seja, ele agora aponta para n[1]. Neste momento *p vale 8.
Instrução: printf("Valor: %d ", *p);
Imprime o conteúdo da posição de memória que p está apontando (n[1]), ou seja, imprime 8.
Instruçao: (*p)++;
Incrementa o conteúdo da posição apontada pelo ponteiro p, ou seja, ele agora aponta para n[1] e n[1] vale 9. Neste momento *p vale 9.
Instrução: printf("Valor: %d\n", *p);
Imprime o conteúdo da posição de memória que p está apontando (n[1]), ou seja, imprime 9.
Então teremos como saída 8 e depois 9.
Não concorda?
Comente, opine e demonstre seu conhecimento!
Gabarito: c
questao interessante..
e eu ia acertar, kkkkkk
obrigacao tb --'
@Jhonatan zooooi, é bem fácil esta questão, comecei colocando as mais simples e depois vou ir colocando as mais complexas! Acompanhe!
Olá Felipe,
Na parte onde você afirmou eles receberem o valor 9 eles deveriam estar referentes a n[2] ao invés de n[1].
@Adriano, amigo olhe com mais atenção: foi incrementado (*p)++, logo continua em n[1] e aumenta seu CONTEÚDO em uma unidade! Correto?
Eu prefiro a linguangem C,me indentifico mais com ela