Analise o código C a seguir. #include <stdio.h> int main() { int myAge = 43; int* ptr = &myAge; printf("%d\n", *ptr); return 0; } O valor mais provável a ser exibido pela execução do código acima é:
- A)0
Errada, porque 0 seria um valor possível em outros contextos, mas não é o conteúdo de myAge.
- B)0x7ffe5367e044
Errada, porque isso parece um endereço de memória, e o código imprime o valor apontado, não o endereço.
- C)43
Certa, porque *ptr acessa o conteúdo de myAge, que foi inicializado com 43.
- D)null
Errada, porque null é conceito de referência nula e não é o resultado de imprimir um inteiro apontado válido em C.
- E)undefined
Errada, porque o programa tem comportamento definido e imprime um inteiro válido, não algo indefinido.
Gabarito: C
Esse código trabalha com ponteiros em C. A variável myAge guarda o valor 43, e a linha int* ptr = &myAge; faz ptr apontar para o endereço de memória de myAge. Em outras palavras, ptr não guarda o número 43, mas o local onde ele está armazenado. Quando o programa usa *ptr no printf, ele faz a desreferência do ponteiro, ou seja, lê o valor que está naquele endereço. Por isso, o que aparece na tela é 43. Em C, isso é bem clássico: & pega o endereço, * acessa o conteúdo apontado. Não tem mistério, só o velho truque da memória.