Variabel Length Array Bahasa C dan Fungsinya
void fun(int n) {int arr[n]; /* ...... */}
int main() {fun(6);}
Namun demikian, penggunaan variabel panjang array tidak berlaku pada C++. Pada standar C++11, ukuran array digunakan sebagai ekspresi konstanta. Jadi beberapa contoh program yang telah dibuat sebelumnya pada bahasa C akan bernilai tidak valid jika dibuat dalam C++.
Catatan: pada tipe terbaru dari C++14, disebutkan bahwa ukuran array merupakan bentuk ekspresi sederhana bukan bentuk ekspresi konstanta.
// Program Bahasa C untuk
// variabel panjang anggota
// dalam struktur GCC sebelum
// C99.
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
// Struktur data tipe student.
struct student
{
int stud_id;
int name_len;
int struct_size;
char stud_name[0];
// Variabel panjang array
// harus ditelakkan bagian
// akhir.
};
// Alokasi memori dan
// inisialisasi structure.
struct student *createStudent(struct student *s, int id, char a[])
{
s = malloc( sizeof(*s) + sizeof(char) * strlen(a) );
s->stud_id = id;
s->name_len = strlen(a);
strcpy(s->stud_name, a);
s->struct_size = ( sizeof(*s) + sizeof(char) * strlen(s->stud_name) );
return s;
}
// Print rincian 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);
// Nilai dari Allocated_Struct_size dalam satuan bytes.
}
//Kode Driver.
int main()
{
struct student *s1, *s2;
s1=createStudent(s1, 523, "SanjayDut");
s2=createStudent(s2, 535, "Bonbon");
printStudent(s1);
printStudent(s2);
//size in bytes
printf("Ukuran dari Struct student: %lu\n", sizeof(struct student));
//size in bytes
printf("Ukuran dari Struct pointer: %lu", sizeof(s1));
return 0;
}
Output:Student_id : 523
Stud_Name : SanjayDut
Name_Length: 11
Allocated_Struct_size: 23
Student_id : 535
Stud_Name : Bonbon
Name_Length: 6
Allocated_Struct_size: 18
Ukuran dari Struct student: 12
Ukuran dari Struct pointer: 8
- Menduplikasi Nilai String Menggunakan STRDUP dan STRNDUP pada Bahasa C
- Melewatkan Nilai Array Melalui Value pada Bahasa C
- Berbagai Metode Untuk Melakukan Reversi String pada Bahasa C
- Mencari Kecocokkan Karakter Menggunakan strpbrk() Bahasa C
- Membandingkan dua nilai Bahasa C Menggunakan Fungsi STRCOLL
- Memeriksa Tanda Baca Bahasa C Menggunakan Fungsi ISPUNCT
- Memeriksa Panjang Nilai Bahasa C Menggunakan Fungsi STRSPN
11 komentar untuk "Variabel Length Array Bahasa C dan Fungsinya"
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 panjang array pada bahasa C?
BalasHapusCara prosedural paling sederhana untuk mendapatkan nilai panjang array adalah dengan menggunakan operator sizeof pada bahasa C. Dimana hal yang dilakukan adalah menentukan ukuran array dan membaginya dengan ukuran satu elemen yang berfungsi untuk setiap item dalam array yang memmiliki tipe yang sama beserta ukurannya.
HapusAda yang bisa memperbaiki bug programnya?
BalasHapus//C program for variable length members in structures in GCC before C99.
#include
#include
#include
//A structure of type student
struct student
{
int stud_id;
int name_len;
int struct_size;
char stud_name[0]; //variable length array must be last.
};
//Memory allocation and initialisation of structure
struct student *createStudent(struct student *s, int id, char a[])
{
s = (struct student*)malloc( sizeof(*s) + sizeof(char) * strlen(a) );
s->stud_id = id;
s->name_len = strlen(a);
strcpy(s->stud_name, a);
s->struct_size = ( sizeof(*s) + sizeof(char) * strlen(s->stud_name) );
return s;
}
// Print student details
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);
//Value of Allocated_Struct_size here is in bytes.
}
//Driver Code
int main()
{
struct student *s1, *s2;
s1=createStudent(s1, 523, "Sanjayulsha");
s2=createStudent(s2, 535, "Cherry");
printStudent(s1);
printStudent(s2);
//size in bytes
printf("Size of Struct student: %lu\n", sizeof(struct student));
//size in bytes
printf("Size of Struct pointer: %lu", sizeof(s1));
free(s1);
free(s2);
return 0;
}
Panjang array dan anggota dinamis adalah dua hal yang berbeda, tetapi keduanya diperkenalkan pada C99.
HapusKode "implementasi" menunjukkan penggunaan anggota array yang fleksibel tetapi kode tersebut memiliki bug karena strlen tidak menghitung pembatas '\0' dari string C. Jika program tersebut dikompilasi dengan beberapa flag optimasi, maka program akan mengalami masalah. Untuk memperbaiki hal tersebut, malloc untuk struct barus harus dapat membaca.
Hapuss = malloc( sizeof(*s) + sizeof(char) * strlen(a) + 1);
Hello,
BalasHapusstrlen(a) pada kode program menyertakan \0; Pada contoh, string pertama yang diambil adalah 11 byte (0-11) tersebut termasuk \0 atau hanya (a)-1 diambil 10 byte (0-10).
Jadi, jika menggunakan (1)+1 berarti a[]="hello" berarti strlen(a)+1=6(0-6);
????
Contoh,
Hapuschar a[21] dapat disimpan pada 20 karakter pada variabel a. Demikian juga, untuk menyimpan karakter strlen(a), juga diperlukan strlen(a)+1 byte.
Ketika array telah dideklarasikan pada program bahasa C, bagaimana dapat dilakukan penetapan nilai? akana dapat melakukan pemberian nilai tersebut satu per satu?
BalasHapusKetika menggunakan malloc, maka dapat dilakukan penentuan nilai satu persatu pada array ketika program tersebut telah dijalankan pada bahasa C.
HapusBagaimana cara untuk membuat array berukuran variabel pada C++?
BalasHapusDapat menggunakan fungsi alokasi C yang dialokasikan pada stack. int *arr=alloca(sizeof(int)*n);
HapusDimana sizeof(int)*N byte akan dialokasikan dari stack. Pastikan pula, tidak menggunakan pointer array di luar fungsi tersebut dan juga turunannya.