Hvordan du bruker malloc -funksjon for å lage en rekke strukturer

Hvordan du bruker malloc -funksjon for å lage en rekke strukturer

Strukturen er en datatype som ligner på matrisen som brukes i C-programmeringen, men den eneste forskjellen er at en matrise inneholder verdiene av samme datatype, mens strukturen inneholder verdiene på grunnlag av brukerdefinerte datatyper. Arraysene okkuperte noen mellomrom på minnet om systemet som kan være dynamiske eller statiske. Malloc () -funksjonen brukes til erklæringen om det dynamiske minnet.

En rekke en struktur kan erklæres enten ved hjelp av det statiske minnet eller dynamisk minne, i denne oppskrivningen vil vi diskutere rekke strukturer ved hjelp av Malloc () -funksjonen.

Hvordan lage en rekke strukturer med Malloc -funksjon i C

Strukturen i C -programmering brukes på samme måte som klasser. Utførelsestiden for strukturene er relativt raskere enn klassene. For å forstå strukturen, bør du vurdere eksemplet:

1
2
3
4
5
6
7
struct ansatte
int emp_id;
char emp_name;
;

Vi har en struktur av "ansatte”Som har ytterligere to medlemmer; EMP_INT og EMP_CHAR. Vi kan danne en matrise som bruker Struct -ansatte som:

1
Struct ansatte ansatte Data [4];

Vi har erklært en matrise "Ansatte Data”Bruke strukturen”ansatte”Og den har 4 steder å lagre verdiene. Hvis vi ønsker å få tilgang til de andre elementene i struct -matrisen vi vil bruke, ansatte Data [1], og på samme måte hvis vi ønsker å få tilgang til medlemmene av elementene vi vil bruke, ansatte Data [1].emp_id.

Men her kan vi også bruke Malloc () -funksjonen til å bruke den dynamiske minnetildelingen. Fordelen med dynamisk minne er at det bruker plassen under utførelsen av programmet i henhold til kravet. For dette bruker vi Malloc () -funksjonen, som sender forespørselen om å tilordne en minneblokk til HAP -segmentet av minnet som lagrer dataene tilfeldig. Hvis heapminnet ikke kan underholde forespørselen fra malloc () på grunn av utilstrekkelig rom, returnerer det null ellers den tildeler den forespurte blokken til Malloc () -funksjonen for utførelse av programmet.

Hvis vi nå ønsker å bruke Malloc () -funksjonen for erklæringen om rekke strukturen, vil programmet være:

1
2
3
4
5
6
7
8
9
10
11
12
1. 3
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#inkludere
#inkludere
int main (int argc, char ** argv)

typedef struct

char* emp_name;
int emp_id;
Ansatte;
int num = 2, i;
Ansatte * Ansatte Data = Malloc (Num * SizeOf * AnsattesData);
for (i = 0; i < num; i++)

Ansatte Data [i].emp_name = (char*) malloc (sizeof (char*));
printf ("Skriv inn ansattes navn:");
SCANF ("%S", EmployeeData [i].emp_name);
printf ("Enter Ansatt ID:");
SCANF ("%D", & EmployeeData [i].emp_id);

printf (“Vennligst skriv inn alle navnene på maksimalt 8 tegn \ n”);
for (i = 0; i < num; i++)
printf ("Ansattes navn: %s, ansatte ID: %d \ n", ansatte Data [i].EMP_NAME, EmployeeSdata [i].emp_id);
gratis (ansattedata);
return (0);

Vi åpner en tekstfil, MyFile1, ved hjelp av Nano Editor og lim inn skriptet ovenfor:

1
$ nano myfile1.c

Bruk GCC -kompilatoren til å kompilere filen ovenfor:

1
$ GCC MyFile1.C -o MyFile1

Når filen er samlet, kjører du programmet ved hjelp av kommandoen:

1
$ ./myfile1

Forklaringen på koden ovenfor er:

  • Først har vi lagt til bibliotekene til stdlib.H (brukt til dynamiske minnetildelingsfunksjoner) og STDIO.H (brukt av de andre grunnleggende funksjonene til C -programmeringen)
  • I hovedfunksjonen passerte vi ARGC (argumentantal) og ArgV (argumentvektor) brukt for tallene som er lagt inn av brukerne og peker på henholdsvis karakterpekerne
  • Etter dette har vi erklært strukturen til “Ansatte”Å ha to verdier emp_id og emp_name
  • Initialisert de to variablene NUM og I; NUM har tildelt verdien av 2 slik at det kan ta to innganger for struct “ansatte”
  • Brukte deretter Malloc -funksjonen for å tilordne minnet i henhold til verdien av NUM til pekerarrayen (ansatte)
  • Tok inngangen fra brukeren og viste verdiene ved å bruke for -loopen

Merk: Vi må bruke “typedef struct”Når vi erklærer strukturen, trenger vi ikke å bruke nøkkelordet" ved å bruke dette "struktur" gjentatte ganger.

En annen ting å bemerkes er at den kan føre til at bufferen overlater fordi vi har brukt "Char *”Inne i Malloc -argumentet for å erklære størrelsen på emp_name variabel. Dette fører til at EMP_name er begrenset til 8 byte for 64-biters arkitektur og 4-byte for 32-biters arkitekturer. Denne bufferoverløpet forekommer ikke hele tiden (mesteparten av tiden administreres automatisk av kompilatoren på kjøretid), derfor har vi fått brukeren til å legge inn 8 tegn maks for ansattes navn bare for å være på sikker side.

Hvis du ikke vil sette en grense for antall tegn for ansattes navn, kan du ganske enkelt ta innspill først for ansattes navn inne i for -loopen i en ny variabel og deretter passere den variabelen i Malloc -funksjonen.

Konklusjon

Struct Data -typen i C -programmering gir bedre ytelse når vi må håndtere små grupper av de samme verdiene. I denne oppskrivningen har vi diskutert opprettelsen av strukturer med matriser ved å bruke den dynamiske minnefunksjonen som er malloc () -funksjonen. Malloc () -funksjonen bruker bare så mye minneblokk som kreves.