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 = &numero;
    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:
  1. 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.
  2. Associando Ponteiros: Usamos o operador & para obter o endereço de cada variável e associá-lo ao ponteiro correspondente.
  3. Leitura dos Valores: Utilizamos scanf para ler os valores das variáveis. É importante passar o endereço das variáveis para que scanf possa armazenar os dados corretamente.
  4. 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.

Exercícios relacionados