Escreva um código em C com quatro variáveis (int, float, double e char) e quatro ponteiros(int, float, double e char). Leia as quatro variavéis utilizando scanf e apresente o endereço, valor e tamanho de cada variável de forma indireta.
Passo 1
Resumo: Vamos criar um código em C que declara quatro variáveis de tipos diferentes (
int
, float
, double
e char
) e quatro ponteiros correspondentes. O programa vai ler valores para essas variáveis usando scanf
e, em seguida, mostrar o endereço, o valor e o tamanho de cada uma delas de forma indireta (usando os ponteiros).Conteúdo: Esse exercício envolve conceitos de variáveis, tipos de dados, ponteiros, entrada de dados com
scanf
e exibição de informações com printf
.O que vamos precisar: Sabermos como declarar variáveis e ponteiros em C, utilizar
scanf
para ler valores, e usar operadores como o de endereço &
e de indireção *
para acessar os valores e endereços das variáveis.Passo 2
Primeiro, vamos declarar as quatro variáveis com os tipos especificados:
int numero;
float decimal;
double grandeDecimal;
char caractere;
Aqui,
numero
é um número inteiro, decimal
é um número de ponto flutuante simples, grandeDecimal
é um número de ponto flutuante duplo, e caractere
armazena um único caractere.Passo 3
Agora, vamos declarar os ponteiros para cada um desses tipos:
int *ptrNumero;
float *ptrDecimal;
double *ptrGrandeDecimal;
char *ptrCaractere;
Os ponteiros
ptrNumero
, ptrDecimal
, ptrGrandeDecimal
e ptrCaractere
vão guardar os endereços de memória das respectivas variáveis.Passo 4
Em seguida, vamos associar cada ponteiro à sua variável correspondente usando o operador de endereço
&
:ptrNumero = №
ptrDecimal = &decimal;
ptrGrandeDecimal = &grandeDecimal;
ptrCaractere = &caractere;
Isso faz com que cada ponteiro aponte para a localização na memória da variável correspondente.
Passo 5
Agora, vamos ler os valores das variáveis usando
scanf
. Lembre-se de passar o endereço das variáveis para que scanf
possa armazenar os valores nelas:printf("Digite um número inteiro: ");
scanf("%d", &numero);
printf("Digite um número float: ");
scanf("%f", &decimal);
printf("Digite um número double: ");
scanf("%lf", &grandeDecimal);
printf("Digite um caractere: ");
scanf(" %c", &caractere);
O espaço antes de
%c
no scanf
para o caractere evita que ele capture um caractere residual no buffer de entrada.Passo 6
Finalmente, vamos exibir o endereço, o valor e o tamanho de cada variável de forma indireta usando os ponteiros:
printf("\nInformações das variáveis:\n");
// Para o inteiro
printf("Inteiro:\n");
printf("Endereço: %p\n", (void*)ptrNumero);
printf("Valor: %d\n", *ptrNumero);
printf("Tamanho: %zu bytes\n\n", sizeof(*ptrNumero));
// Para o float
printf("Float:\n");
printf("Endereço: %p\n", (void*)ptrDecimal);
printf("Valor: %.2f\n", *ptrDecimal);
printf("Tamanho: %zu bytes\n\n", sizeof(*ptrDecimal));
// Para o double
printf("Double:\n");
printf("Endereço: %p\n", (void*)ptrGrandeDecimal);
printf("Valor: %.2lf\n", *ptrGrandeDecimal);
printf("Tamanho: %zu bytes\n\n", sizeof(*ptrGrandeDecimal));
// Para o char
printf("Char:\n");
printf("Endereço: %p\n", (void*)ptrCaractere);
printf("Valor: %c\n", *ptrCaractere);
printf("Tamanho: %zu byte\n", sizeof(*ptrCaractere));
%p
é usado para imprimir endereços de ponteiros.*ptr
acessa o valor armazenado no endereço apontado pelo ponteiro.sizeof(*ptr)
retorna o tamanho da variável apontada pelo ponteiro em bytes.
Resposta
Aqui está o código completo que realiza todas as etapas mencionadas:
#include <stdio.h>
int main() {
// Declaração das variáveis
int numero;
float decimal;
double grandeDecimal;
char caractere;
// Declaração dos ponteiros
int *ptrNumero;
float *ptrDecimal;
double *ptrGrandeDecimal;
char *ptrCaractere;
// Associando ponteiros às variáveis
ptrNumero = №
ptrDecimal = &decimal;
ptrGrandeDecimal = &grandeDecimal;
ptrCaractere = &caractere;
// Leitura dos valores
printf("Digite um número inteiro: ");
scanf("%d", &numero);
printf("Digite um número float: ");
scanf("%f", &decimal);
printf("Digite um número double: ");
scanf("%lf", &grandeDecimal);
printf("Digite um caractere: ");
scanf(" %c", &caractere);
// Exibição das informações
printf("\nInformações das variáveis:\n");
// Para o inteiro
printf("Inteiro:\n");
printf("Endereço: %p\n", (void*)ptrNumero);
printf("Valor: %d\n", *ptrNumero);
printf("Tamanho: %zu bytes\n\n", sizeof(*ptrNumero));
// Para o float
printf("Float:\n");
printf("Endereço: %p\n", (void*)ptrDecimal);
printf("Valor: %.2f\n", *ptrDecimal);
printf("Tamanho: %zu bytes\n\n", sizeof(*ptrDecimal));
// Para o double
printf("Double:\n");
printf("Endereço: %p\n", (void*)ptrGrandeDecimal);
printf("Valor: %.2lf\n", *ptrGrandeDecimal);
printf("Tamanho: %zu bytes\n\n", sizeof(*ptrGrandeDecimal));
// Para o char
printf("Char:\n");
printf("Endereço: %p\n", (void*)ptrCaractere);
printf("Valor: %c\n", *ptrCaractere);
printf("Tamanho: %zu byte\n", sizeof(*ptrCaractere));
return 0;
}
Como funciona o código:
-
Declaração das Variáveis e Ponteiros: Primeiro, declaramos quatro variáveis de tipos diferentes e quatro ponteiros que apontarão para essas variáveis.
-
Associando Ponteiros: Usamos o operador
&
para obter o endereço de cada variável e associá-lo ao ponteiro correspondente. -
Leitura dos Valores: Utilizamos
scanf
para ler os valores das variáveis. É importante passar o endereço das variáveis para quescanf
possa armazenar os dados corretamente. -
Exibição das Informações: Usamos
printf
para mostrar o endereço (%p
), o valor (%d
,%.2f
, etc.) e o tamanho (%zu
) de cada variável. Usamos os ponteiros para acessar esses dados de forma indireta.
Exemplo de Saída:
Digite um número inteiro: 10
Digite um número float: 3.14
Digite um número double: 2.71828
Digite um caractere: A
Informações das variáveis:
Inteiro:
Endereço: 0x7ffee3b3c9ac
Valor: 10
Tamanho: 4 bytes
Float:
Endereço: 0x7ffee3b3c9a8
Valor: 3.14
Tamanho: 4 bytes
Double:
Endereço: 0x7ffee3b3c9a0
Valor: 2.72
Tamanho: 8 bytes
Char:
Endereço: 0x7ffee3b3c99f
Valor: A
Tamanho: 1 byte
Esse código cumpre todos os requisitos do exercício, declarando as variáveis e ponteiros, lendo os valores com
scanf
e exibindo as informações solicitadas de forma indireta.