Estrutura de Dados em C Flashcards
Qual o impacto da escolha de uma estrutura de dados?
A escolha da estrutura de dados tem um impacto direto no desempenho do algoritmo. Se você escolher uma estrutura inadequada para um certo problema, o desempenho será insatisfatório, acarretando uma má experiência.
Como podemos definir o ponteiro superficialmente?
E de maneira mais profunda?
Podemos definir o ponteiro como um tipo especial de variável, na qual o valor atribuído é um endereço de memória.
De maneira mais profunda, podemos defini-lo como uma variável que guarda o endereço de memória de outra variável associada, ou seja, uma variável que guarda a localização do dado de outra variável, isto é, uma variável que aponta para outra.
Como é composta a memória do computador?
É composta por palavras que são identificadas unicamente por endereços de memória. Esses endereços de memória são dispostos sequencialmente e possuem tamanho pré-definido de bytes que representam as palavras.
É sabido que o endereço de memória de um processo em execução é divido em segmentos lógicos, os mais importantes são quais e o que estes armazenam?
O segmento Text armazena os códigos do programa e suas constantes.
O segmento Data armazena as variáveis globais e as variáveis estáticas do processo, é a memória de trabalho do processo.
O segmento Heap armazena blocos de memória alocados dinamicamente durante a execução do programa.
O segmento Stack armazena a pilha de execução que guarda os parâmetros, endereços de retorno e variáveis locais de funções.
Como se comportam os segmentos lógicos, os tamanhos variam ou permanecem fixos?
No segmento Text, os dados são alocados nele durante a criação do processo “exec” e a partir disso, há tamanho fixo durante toda a execução do programa.
No segmento Data há tamanho fixo durante toda a execução do programa.
No segmento Heap há variação de tamanho durante a execução do programa.
No segmento Stack pode haver variação de tamanho durante a execução do programa.
Como funciona o modificador static da variável?
Usando o modificador static na variável mesmo quando o modificador static sair do escopo, ele continua funcionando como se não tivesse saído, seu valor se preserva.
Como se chama o tipo de alocação que geralmente aloca em HEAP e como ela funciona?
A alocação que geralmente aloca em HEAP é chamada de alocação dinâmica. Nesse tipo de alocação é requisitada explicitamente pelo programa uma área de memória para armazenamento de dados. O controle dessas áreas pode ser manual ou semiautomático. Desta forma, o programa utiliza as áreas e depois as libera quando não mais forem necessárias ou quando o programa encerrar. A liberação e a alocação dessas áreas alocadas dinamicamente devem ser realizadas pelo programador.
Como se chama o tipo de alocação que geralmente aloca em STACK e como ela funciona?
A alocação que geralmente aloca em STACK é chamada de alocação automática. Ela se diferencia pelo fato de ser alocada automaticamente pelo programa, a alocação dessas variáveis é realizada quando a função é invocada e liberada quando a função termina.
Como pode ser feita a alocação dinâmica manual?
Em ambas utilizamos a biblioteca stdlib.h.
Na forma simples, usando malloc, free e realloc.
Por vetor, usamos calloc e free.
Para que serve a função malloc?
Ela é útil para ser usada em qual circunstância?
Após o uso de malloc, calloc e realloc é recomendado fortemente fazer o uso de que?
Para alocar dinamicamente um bloco de memória durante a execução do programa.
Ela é útil quando você não sabe previamente o tamanho exato de memória necessária ou deseja alocar memória em tempo real com base em condições dinâmicas.
É recomendado fortemente após o uso dessas funções fazer a verificação de retorno delas, para se elas forem igual a NULL, haver o retorno de uma mensagem de erro.
Em realloc, caso realloc seja igual a NULL, devemos liberar e memória alocada anteriormente assim como retornar mensagem de erro.
O que faz a função realloc?
Redimensiona um bloco de memória já previamente alocado, sem perder os dados armazenados anteriormente nele.
Para que serve a função calloc?
Serve para alocar dinamicamente memória para um determinado número de elementos e, além disso, inicializa todos os bits da memória alocada com valor 0, diferente de malloc. Mais utilizada quando já se sabe a quantidade exata a ser alocada.
Depois do uso total de calloc, malloc e realloc, devemos usar qual função?
Devemos usar free para liberar a memória alocada.
Qual é considerada uma das características mais importantes de um ponteiro?
Uma das características mais importantes de um ponteiro, é que utilizando-o podemos acessar indiretamente outras variáveis associadas a ele, tanto conseguindo fazer a leitura dessas variáveis, quanto alterá-las.
Como se declara um ponteiro? Como é a forma geral?
Utilizando um asterisco(*) entre o tipo da variável e o nome dela.
A forma geral: tipo *nome;
Quais são os operadores que permitem o uso dos ponteiros?
- & (operador unário “&” ou ponteiro constante): possui a função de obter o endereço de memória de uma outra variável.
- (operador unário “*” ou indireção): é usado para interagir com a variável que o ponteiro está interagindo, ou seja, apontando.
Em C, como acessar o conteúdo armazenado no ponteiro?
*ptr_x;