Universidade Federal da Grande Dourados

Sistemas de Informação

Laboratório de Programação II

Programa de Monitoria

Respostas Lista 1 - Ponteiros e Alocação Dinâmica

1.

a) &
b) *
c) endereço
d) endereço
e) 0

2.

x = 16
y = 24
z = 17

3.

4.

A função scanf necessita do endereço de memória da variável para que o valor seja corretamente armazenado.
Em variáveis compostas, usar apenas o nome da variável (sem o operador [ ]) é equivalente ao endereço da primeira posição de memória. Outra forma seria &(str[0])

5.

void swap(int *a, int *b) {
    int aux;

    aux = *a;
    *a = *b;
    *b = aux;
}

6.

int *vetor;
int n_elementos;

// Alocando o vetor de inteiros:
vetor = (int*) malloc(n_elementos * sizeof(int));

// Liberando a memória alocada:
free(vetor);

7.

int **matriz;
int n_linhas;
int n_colunas;
int i;

// Alocando um vetor de ponteiros:
matriz = (int**) malloc(n_linhas * sizeof(int*));

// Para cada ponteiro do vetor, aloca um vetor de inteiros:
for(i = 0; i < n_linhas; i++) {
    matriz[i] = (int*) malloc(n_colunas * sizeof(int));
}

// Liberando as memórias alocadas:
for(i = 0; i < n_linhas; i++) {
    free(matriz[i]);
}
free(matriz);

8.

#include <stdlib.h>
#include <string.h>

char *concatena(char *str1, char *str2) {
    char *str3;

    int len1;
    int len2;
    int len3;

    int i;

    len1 = strlen(str1);
    len2 = strlen(str2);
    len3 = len1 + len2 + 1; // +1 devido ao caractere \0

    str3 = (char*) malloc(len3 * sizeof(char));

    // Insere a primeira string
    for(i = 0; i < len1; i++) {
        str3[i] = str1[i];
    }

    // Insere a segunda string
    for(i = 0; i < len2; i++) {
        str3[len1 + i] = str2[i];
    }

    str3[len3] = '\0';

    return str3;
}

9.

#include <stdlib.h>
#include <string.h>

char *inverter(char *str) {
    int i, j;
    int len;
    char *inv;

    len = strlen(str);
    inv = (char*) malloc(len * sizeof(char));

    for(i = len - 1, j = 0; i >= 0; i--, j++) {
        inv[j] = str[i];
    }

    inv[len] = '\0';

    return inv;
}

Voltar