A estrutura é um tipo de dados semelhante à matriz usada na programação C, mas a única diferença é que uma matriz contém os valores do mesmo tipo de dados, enquanto a estrutura contém os valores com base nos tipos de dados definidos pelo usuário. As matrizes ocupavam alguns espaços na memória do sistema que podem ser dinâmicos ou estáticos. A função malloc () é usada para a declaração da memória dinâmica.
Uma matriz de uma estrutura pode ser declarada usando a memória estática ou a memória dinâmica, nesta redação, discutiremos a matriz de estruturas usando a função malloc ().
Como criar uma variedade de estruturas com a função malloc em c
As estruturas na programação C são usadas de maneira semelhante às classes. O tempo de execução das estruturas é relativamente mais rápido que as classes. Para entender a estrutura, considere o exemplo:
1 2 3 4 5 6 7 | funcionários da estrutura int emp_id; char emp_name; ; |
Temos uma estrutura de “funcionários”, Que tem mais dois membros; EMP_INT e EMP_CHAR. Podemos formar uma matriz usando os funcionários da estrutura como:
1 | STRUCT FUNCIONÁRIOS DO FUNCIONÁRIODATA [4]; |
Nós declaramos uma matriz “FuncionáriosData”Usando a estrutura“funcionários”E tem 4 locais para armazenar os valores. Se quisermos acessar os segundos elementos da matriz STRUT que usaremos, Funcionários Data [1] e, da mesma forma.emp_id.
Mas aqui também podemos usar a função malloc () para usar a alocação de memória dinâmica. A vantagem da memória dinâmica é que ela utiliza o espaço durante a execução do programa de acordo com o requisito. Para isso, usamos a função malloc (), que envia a solicitação para atribuir um bloco de memória ao segmento de heap da memória que armazena os dados aleatoriamente. Se a memória da heap não puder entreter a solicitação de malloc () devido ao espaço insuficiente, ele retornará o nulo, caso contrário, atribui o bloco solicitado à função malloc () para a execução do programa.
Agora, se quisermos usar a função malloc () para a declaração da matriz de struct, o programa será:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #incluir #incluir int main (int argc, char ** argv) typedef struct char* emp_name; int emp_id; Funcionários; int num = 2, i; Funcionários * funcionáriosData = malloc (num * sizeof * funcionáriosdatos); para (i = 0; i < num; i++) funcionáriosdata [i].emp_name = (char*) malloc (sizeof (char*)); printf ("Digite o nome do funcionário:"); scanf ("%s", funcionáriosdata [i].emp_name); printf ("Digite ID do funcionário:"); scanf ("%d", & funcionáriosdata [i].emp_id); printf (“Por favor, insira todos os nomes do máximo de 8 caracteres \ n”); para (i = 0; i < num; i++) printf ("Nome do funcionário: %s, funcionários ID: %d \ n", funcionáriosdata [i].emp_name, funcionáriosdata [i].emp_id); grátis (funcionáriosData); retornar (0); |
Abriremos um arquivo de texto, MyFile1, com a ajuda do editor de nano e cole o script acima:
1 | $ nano myfile1.c |
Use o compilador GCC para compilar o arquivo acima:
1 | $ gcc myfile1.C -O MyFile1 |
Depois que o arquivo for compilado com sucesso, execute o programa usando o comando:
1 | $ ./myfile1 |
A explicação do código acima é:
Observação: Temos que usar o “typedef struct”Ao declarar a estrutura, usando isso, não precisamos usar a palavra -chave“estrutura”Repetidamente.
Outra coisa a ser observada é que ele pode fazer com que o buffer transborque porque usamos o “Caracteres *”Dentro do argumento malloc para declarar o tamanho do EMP_NAME variável. Isso faz com que o EMP_NAME seja limitado a 8 bytes para arquitetura de 64 bits e 4- bytes para arquiteturas de 32 bits. Esse transbordamento de buffer não ocorre o tempo todo (na maioria das vezes é gerenciado automaticamente pelo compilador no tempo de execução), portanto, levamos ao usuário a inserir 8 caracteres no máximo para o nome do funcionário apenas para estar do lado seguro.
Se você não deseja colocar um limite no número de caracteres para o nome do funcionário, poderá simplesmente levar a entrada primeiro para o nome do funcionário dentro do loop for dentro de uma nova variável e depois passar esse tamanho variável na função malloc.
Conclusão
O tipo de dados da estrutura na programação C oferece melhor desempenho quando precisamos lidar com pequenos grupos dos mesmos valores. Nesta redação, discutimos a criação de estruturas com matrizes usando a função de memória dinâmica que é a função malloc (). A função MALLOC () usa apenas tanto bloco de memória que é necessário.