Struktura jest typem danych podobnym do tablicy zastosowanej w programowaniu C, ale jedyną różnicą jest to, że tablica zawiera wartości tego samego typu danych, podczas gdy struktura zawiera wartości na podstawie typów danych zdefiniowanych przez użytkownika. Tablice zajmowały niektóre przestrzenie na pamięci systemu, które mogą być dynamiczne lub statyczne. Funkcja Malloc () jest używana do deklaracji pamięci dynamicznej.
Tablicę struktury można zadeklarować za pomocą pamięci statycznej lub pamięci dynamicznej, w tym zapisie omówimy tablicę struktur za pomocą funkcji Malloc ().
Jak utworzyć tablicę struktur z funkcją Malloc w C
Struktury w programowaniu C są stosowane podobnie do klas. Czas wykonywania struktur jest stosunkowo szybszy niż klasy. Aby zrozumieć strukturę, rozważ przykład:
1 2 3 4 5 6 7 | STRUCK PRACOWNIK int emp_id; Char emp_name; ; |
Mamy strukturę „pracownicy„Który ma dwóch kolejnych członków; emp_int i emp_char. Możemy utworzyć tablicę za pomocą pracowników struktury jako:
1 | Pracownicy struktury Pracownicy [4]; |
Oświadczyliśmy tablicę „Pracownicy”Używanie struktury„pracownicy”I ma 4 lokalizacje do przechowywania wartości. Jeśli chcemy uzyskać dostęp do drugich elementów tablicy struktur, z których skorzystamy, pracownicy [1] i podobnie jeśli chcemy uzyskać dostęp do członków elementów, których będziemy korzystać, pracownicy [1].emp_id.
Ale tutaj możemy również użyć funkcji Malloc () do użycia dynamicznej alokacji pamięci. Zaletą pamięci dynamicznej jest to, że wykorzystuje przestrzeń podczas wykonywania programu zgodnie z wymogiem. W tym celu używamy funkcji Malloc (), która wysyła żądanie do przypisania bloku pamięci do segmentu sterty pamięci, która przechowuje dane losowo. Jeśli pamięć sterta nie może zabawić żądania Malloc () ze względu.
Teraz, jeśli chcemy użyć funkcji Malloc () do deklaracji tablicy struktury, program będzie:
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 | #włączać #włączać int main (int argc, char ** argv) STRUKTYNEK TYPEDEF char* emp_name; int emp_id; Pracownicy; int num = 2, i; Pracownicy * Pracownicy dla (i = 0; i < num; i++) pracownicy [i].emp_name = (char*) malloc (sizeof (char*)); printf („Wprowadź nazwę pracownika:”); Scanf („%s”, pracownicy [i].Emp_name); printf („Wprowadź identyfikator pracownika:”); Scanf („%D” i pracownicy.emp_id); printf („Wprowadź wszystkie nazwy maksymalnie 8 znaków \ n”); dla (i = 0; i < num; i++) printf („Nazwa pracownika: %S, pracownicy identyfikator: %d \ n”, pracownicy [i].EMP_NAME, PRACOWNIKADATA [i].emp_id); darmowe (pracowników); return (0); |
Otworzymy plik tekstowy MyFile1 z pomocą Nano Editor i wklejemy powyższy skrypt:
1 | $ nano myfile1.C |
Użyj kompilatora GCC, aby skompilować powyższy plik:
1 | $ gcc myfile1.C -O myfile1 |
Po pomyślnym skompilowaniu pliku uruchom program za pomocą polecenia:
1 | $ ./Myfile1 |
Wyjaśnienie powyższego kodu to:
Notatka: Musimy użyć „STRUKTYNEK TYPEDEF„Deklarując strukturę, używając tego, nie musimy używać słowa kluczowego”struct„Wielokrotnie.
Kolejną rzeczą należy zauważyć, że może to spowodować przepełnienie bufora, ponieważ użyliśmy „char *”Wewnątrz argumentu Malloc o deklarowaniu wielkości nazwa_mp_ zmienny. Powoduje to ograniczenie nazwy EMP_Nam. Ten przepełnienie bufora nie występuje przez cały czas (większość czasu jest automatycznie zarządzana przez kompilator w czasie wykonywania), dlatego zachęciliśmy użytkownika do wprowadzenia 8 znaków maksymalnych dla nazwy pracownika, aby być po bezpiecznej stronie.
Jeśli nie chcesz ustawiać limitu liczby znaków dla nazwy pracownika, możesz po prostu przejąć dane wejściowe dla nazwy pracownika w pętli dla nowej zmiennej, a następnie przekazać ten rozmiar zmiennej w funkcji Malloc.
Wniosek
Typ danych struktury w programowaniu C zapewnia lepszą wydajność, gdy musimy radzić sobie z małymi grupami o tych samych wartościach. W tym zapisie omówiliśmy tworzenie struktur z tablicami przy użyciu funkcji dynamicznej pamięci, jaką jest funkcja Malloc (). Funkcja Malloc () używa tylko tyle bloku pamięci, która jest wymagana.