Anggota Array Fleksibel Struct Pada Bahasa C
Untuk struct pada Bahasa C dari standar C99 dan seterusnya, dapat dilakukan proses deklarasi array tanpa sebuah dimensi dan nilai ukurannya dapat fleksibel secara alami sesuai dengan nilai yang diberikan pada array. Array seperti ini, yang terdapat dalam suatu struct sebaiknya dideklarasikan sebagai anggota terakhir dari struktur, dan ukurannya bervariasi atau dapat diubah saat runtime.
Contoh:
{ int stud_id; /* ukuran 4 byte */
int name_len; /* ukuran 4 byte */
int struct_size; /* ukuran 4 byte */
char stud_name[]; /* ukuran 0 byte */ };
Nilai ukuran dari struct adalah 4 + 4 + 4 + 0 = 12.
Pada contoh potongan kode program tersebut, nilai ukuran atau panjang array dari array "stud_name" adalah tidak pasti dan merupakan bentuk FAM.
struct student *s = malloc( sizeof(*s) + sizeof(char [strlen(stud_name)]) );
Catatan: Saat menggunakan anggota array fleksibel dalam struktur, beberapa konvensi mengenai ukuran sebenarnya dari anggota tersebut telah ditentukan.
Dalam contoh sebelumnya, nilai konvensi adalah anggota "stud_name" sebesar nilai ukuran karakter.
Contoh: perhatikan program struct berikut.
Input : id = 15, name = "Kartik"
Output : Student_id : 15
Stud_Name : Kartik
Name_Length: 6
Allocated_Struct_size: 18
Alokasi memori struct dari contoh program sebelumnya adalah:
struct student *s = malloc( sizeof(*s) + sizeof(char [strlen("Kartik")]));
Representasi struct tersebut adalah:
struct student
{ int stud_id;
int name_len;
int struct_size;
char stud_name[6]; /* character array of length 6 */ };
Implementasi Struct FAM Bahasa C
Contoh:
// Program Bahasa C untuk
// anggota variabel length
// pada struct GCC.
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
// Struct dari tipe student.
struct student
{
int stud_id;
int name_len;
// Digunakan untuk menyimpan
// nilai ukuran dari array
// karakter fleksibel
// stud_name[]
int struct_size;
// Flexible Array Member(FAM)
// variabel panjang array
// harus anggota terakhir dari
// struct.
char stud_name[];
};
// Alokasi memori dan inisialisasi struct.
struct student *createStudent(struct student *s,
int id, char a[])
{
// Alokasi memori menurut
// array yang disediakan
// pengguna dari suatu
// karakter.
s =
malloc( sizeof(*s) + sizeof(char) * strlen(a));
s->stud_id = id;
s->name_len = strlen(a);
strcpy(s->stud_name, a);
// Penetapan ukuran menurut
// nilai ukuran dari stud_name
// yang diduplikasi dari array
// yang disediakan oleh
// pengguna a[].
s->struct_size =
(sizeof(*s) + sizeof(char) * strlen(s->stud_name));
return s;
}
// Mencetak rincian nilai
// student
void printStudent(struct student *s)
{
printf("Student_id : %d\n"
"Stud_Name : %s\n"
"Name_Length: %d\n"
"Allocated_Struct_size: %d\n\n",
s->stud_id, s->stud_name, s->name_len,
s->struct_size);
}
// Driver Code
int main()
{
struct student *s1 = createStudent(s1, 523, "Cherry");
struct student *s2 = createStudent(s2, 535, "Sanjayulsha");
printStudent(s1);
printStudent(s2);
// Ukuran nilai struct student
printf("Size of Struct student: %lu\n",
sizeof(struct student));
// UKuran pada pointer struct
printf("Size of Struct pointer: %lu",
sizeof(s1));
return 0;
}
Output:Student_id : 523
Stud_Name : SanjayKanna
Name_Length: 11
Allocated_Struct_size: 23
Student_id : 535
Stud_Name : Cherry
Name_Length: 6
Allocated_Struct_size: 18
Size of Struct student: 12
Size of Struct pointer: 8
Important Points:
Catatan:
- Lokasi memori bersebelahan atau Adjacent digunakan untuk menyimpan anggota struct pada memori tersebut.
- Pada standar bahasa C sebelumnya, dapat dilakukan proses deklarasi pada sebuah ukuran zero dari anggota array pada lokasi dari sebuah anggota array fleksibel, dimana kompilator GCC dengan standar C89 akan mempertimbangkannya sebagai array dengan ukuran zero atau nol.
- Pengurutan Struct Bahasa C Beserta Contoh Programnya
- Layout Memori Bahasa C dan Penjelasannya
- Dealokasi Memori Bahasa C Tanpa Menggunakan free()
- Perbedaan malloc() dan calloc() Bahasa C
- Fungsi free() Bahasa C untuk Mengetahui Ukuran Memori yang Dealokasi
- Penggunaan realloc() Bahasa C dan Penjelasannya
- Kebocoran Memori Bahasa C dan Cara Mengatasinya
5 komentar untuk "Anggota Array Fleksibel Struct Pada Bahasa C"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Apa yang dimaksud dengan anggota array fleksibel pada bahasa C?
BalasHapusAnggota array fleksibel pada bahasa C merupakan fitur yang terdapat pada C99, yang digunakan untuk mengakses object melalui panjang variabel.
HapusAnggota array fleksibel dideklarasikan dengan indeks kosong, sehingga nilai array yang disimpan dapat fleksibel.
HapusApakah array pada Bahasa C dapat dideklarasikan tanpa ditentukan nilai ukurannya?
BalasHapusPengguna dapat mendeklarasikan nilai array tanpa perlu mementukan nilai ukuran untuk dimensi paling kiri dalam banya kondisi kasus.
Hapus