int i=3,j=5;
int *p, *q;
p=&i;
q = &j;
Determine o valor das seguintes expressões, justificando o porquê de cada resultado:
int *p, *q;
p=&i;
q = &j;
Determine o valor das seguintes expressões, justificando o porquê de cada resultado:
Passo 1
Beleza, vamos resolver esse exercício juntos! A questão trata de ponteiros em C. Precisamos entender como os ponteiros funcionam, ou seja, como eles armazenam endereços de memória e como podemos acessar os valores dessas posições. Para resolver as expressões dadas, vamos precisar saber sobre:
- Declaração e inicialização de ponteiros.
- Operadores de referência (
&
) e desreferência (*
). - Operações aritméticas com ponteiros.
Passo 2
Primeiro, vamos analisar as variáveis e ponteiros declarados:
int i = 3, j = 5;
int *p, *q;
p = &i;
q = &j;
Aqui,
i
é um inteiro com valor 3
, j
é um inteiro com valor 5
. p
e q
são ponteiros para inteiros. A linha p = &i;
faz com que p
aponte para o endereço de i
, e q = &j;
faz o mesmo para j
.Passo 3
Vamos resolver a primeira expressão:
Explicação:
&i
é o endereço de memória da variáveli
.p
foi atribuído para apontar parai
, ou seja,p = &i;
.
Cálculo:
Como
p
aponta para i
e &i
é o endereço de i
, então p == &i
é verdadeiro.Resultado:
1
(em C, true
é representado por 1
).Passo 4
Agora, a segunda expressão:
Explicação:
*p
desreferencia o ponteirop
, ou seja, acessa o valor dei
, que é3
.*q
desreferencia o ponteiroq
, acessa o valor dej
, que é5
.- A expressão realiza a subtração desses valores.
Cálculo:
Resultado:
-2
Passo 5
Vamos para a terceira expressão:
Explicação:
&p
obtém o endereço do ponteirop
.*(&p)
desreferencia esse endereço, retornando o próprio ponteirop
.*p
desreferenciap
, acessando o valor dei
, que é3
.
Cálculo:
Resultado:
3
Passo 6
Finalmente, a quarta expressão:
Explicação:
*p
desreferenciap
, obtendo3
.*q
desreferenciaq
, obtendo5
.- A expressão realiza as operações: divisão, subtração e adição.
Cálculo:
Primeiro, a divisão inteira:
(No C, divisão entre inteiros resulta em inteiro, descartando a parte decimal.)
Agora, substituindo na expressão:
Resultado:
10
Resposta
- p == &i →
1
- *p - *q →
-2
- **&p →
3
- 3 - *p/(*q) + 7 →
10