Artikel Terbaru

4 Keunggulan Utama Bitcoin

Sebelum membicarakan tentang bitcoin, terlebih dahulu mari pahami apa yang dimaksud dengan uang. Apa sebenarnya yang dimaksud dengan uang? Pada dasarnya, uang adalah segala sesuatu yang mewakili nilai tertentu.

Fakta Tentang Variabel Length Array Bahasa C

Variabel panjang array merupakan fitur yang terdapat pada Bahasa C yang memungkinkan untuk mengalokasikan array secara otomatis pada stack dengan ukuran variabel tertentu. Bahasa C mendukung penggunaan array berukuran variabel dari standar C99. Contoh, program berikut akan dapat berjalan dengan baik jika dikalompilasi pada bahasa C.

Pada standar C99 atau C11, juga terdapat fitur yang disebut "flexible array members", yang berfungsi sama seperti fungsi variabel panjang array.

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++.

Namun, jika contoh program pada bahasa C yang telah dibuat ke dalam C++ dan dikompilasi menggunakan GCC, maka program tersebut dapat berfungsi dengan baik, karena pada GCC terdapat ekstensi yang mendukungnya.

Catatan: pada tipe terbaru dari C++14, disebutkan bahwa ukuran array merupakan bentuk ekspresi sederhana bukan bentuk ekspresi konstanta.

Contoh:

// 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

Komentar

  1. Apa yang dimaksud dengan panjang array pada bahasa C?

    BalasHapus
    Balasan
    1. Cara 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.

      Hapus
  2. Ada yang bisa memperbaiki bug programnya?

    //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;
    }

    BalasHapus
    Balasan
    1. Panjang array dan anggota dinamis adalah dua hal yang berbeda, tetapi keduanya diperkenalkan pada C99.

      Hapus
    2. Kode "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.

      s = malloc( sizeof(*s) + sizeof(char) * strlen(a) + 1);

      Hapus
  3. Hello,

    strlen(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);

    ????

    BalasHapus
    Balasan
    1. Contoh,

      char a[21] dapat disimpan pada 20 karakter pada variabel a. Demikian juga, untuk menyimpan karakter strlen(a), juga diperlukan strlen(a)+1 byte.

      Hapus
  4. Ketika array telah dideklarasikan pada program bahasa C, bagaimana dapat dilakukan penetapan nilai? akana dapat melakukan pemberian nilai tersebut satu per satu?

    BalasHapus
    Balasan
    1. Ketika menggunakan malloc, maka dapat dilakukan penentuan nilai satu persatu pada array ketika program tersebut telah dijalankan pada bahasa C.

      Hapus
  5. Bagaimana cara untuk membuat array berukuran variabel pada C++?

    BalasHapus
    Balasan
    1. Dapat menggunakan fungsi alokasi C yang dialokasikan pada stack. int *arr=alloca(sizeof(int)*n);

      Dimana sizeof(int)*N byte akan dialokasikan dari stack. Pastikan pula, tidak menggunakan pointer array di luar fungsi tersebut dan juga turunannya.

      Hapus

Posting Komentar

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung. :D

Catatan: setiap iklan yang ditayangkan pada blog ini bersumber dari google adsense. Dengan jenis iklan yang dipilih adalah, sebagai berikut.

POIN 1, Iklan yang ditampilkan hanya boleh berbahasa indonesia atau berbahasa inggris. Tidak menerima jenis iklan dalam bahasa yang lain selain yang telah disebutkan karena blog ini dibuat untuk para pengunjung dari negara atau orang yang berbahasa Indonesia.

POIN 2, Setiap gambar yang ditampilkan pada iklan sifatnya tidak mengganggu para pengunjung yang melihat blog, atau tidak boleh menampilkan gambar yang bersifat menjijikkan atau merangsang rasa mual.

POIN 3, Jenis iklan yang dipasang bukan merupakan iklan spam, atau berisi dan mengarahkan pengunjung ke alamat yang berbahaya atau bersifat penipuan.

POIN 4, Segala bentuk iklan tunduk dan patuh pada ketentuan dari pihak Adsense google dan pemilik blog.

POIN 5, Segala jenis iklan yang tidak bertentangan dengan poin 1-4 yang dijelaskan sebelumnya, maka iklan tersebut dapat ditampilkan pada blog.

POIN 6, Jika ada pihak ketika yang ingin memasang iklan pada blog ini secara langsung, maka dapat menghubungi pemilik blog melalui kontak 0882 3218 8316.



~ Ikatlah Ilmu dengan Memostingkannya ~

Hot Artikel

Enkapsulasi pada Java

Perbedaan stdio.h dan stdlib.h pada Bahasa C

6 Tahap Utama dalam Melakukan Kompilasi Program Hello World Java

4 Contoh Program Java dan Multiple Inheritance

3 Jenis Utama Looping pada Java