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 Perbedaan Antara Char s[] dan Char *s pada Bahasa C

Pada artikel ini akan dijelaskan perbedaan antara penggunaan char s[] dan char *s pada program bahasa C.

Perhatikan dua statement berikut dalam bahasa C. Apakah perbedaan dari kedua statement tersebut?
  • char s[] = "kuis";
  • char *s = "kuis";

Tabel 1 memperlihatkan perbedaan antara kedua statement tersebut.

Tabel 1 Perbedaan Antara Array dan Pointer
Char a[10]="boom";Char *p="boom"
a adalah arrayp adalah variabel pointer
sizeof(a) = 10 bytessizeof(p) = 4 bytes
a dan &a adalah samap dan &p adalah tidak sama
"boom" disimpan pada section stack dari memorip disimpan pada stack tetapi "boom" disimpan pada section kode dari memori
char a[10]="boom";
a = "hello" //invalid
a adalah alamat dan string konstanta adalah alamat juga
char *p = "boom";
p = "india"; //valid
a++ adalah invalidp++ adalah valid
char a[10] ="boom";
a [0]='b'; // valid
char *p ="boom";
p[0]='k'; //invalid
code section adalah read only


Statement 'char s[] = "kuis1"' menciptakan karakter array yang sama seperti array lainnya dan dapat melakukan semua jenis operasi array didalamnya. Hanya saja, hal yang spesial dari statement array tersebut adalah proses inisialisasinya menggunakan 4 elemen dengan ukurannya adalah 5, dimana kompilator secara otomatis akan menambahkan karakter '\0'.

Contoh 1:

#include <stdio.h>

 

int main()

{

char s[] = "kuis";

printf("%lu", sizeof(s));

s[0] = 'j';

printf("\n%s", s);

return 0;

}

Output:
5
juis

Sedangkan pada statement 'char *s = "kuis"' akan menciptakan string literal. String literal merupakan bentuk statement yang disimpan pada bagian memori read only oleh kebanyakan kompilator. Pada standar bahasa C dan C++, string literal memiliki durasi penyimpanan static, dimana setiap upaya yang digunakan untuk memodifikasinya akan memberikan behavior yang tidak terdefinisi, sedangkan variabel s pada statement kedua, hanya merupakan pointer yang menyimpan alamat dari string literal.

Contoh 2:

#include <stdio.h>

 

int main()

{

char *s = "kuis";

printf("%lu", sizeof(s));

// Membatalkan komentar di

// bawah baris akan

// menyebabkan behavior tidak

// terdefinisi

 

// (karena segmentation fault

// on gcc)

 

// s[0] = 'j';

return 0;

}

Output:
8

Jika program berikut dijalankan, maka akan menghasilkan peringatan berupa "warning: deprecated conversion from string constant to 'char*'". Peringatan tersebut terjadi karena s bukan merupakan pointer const, tetapi variabel yang menyimpan alamat lokasi read-only. Peringatan tersebut dapat dihindari dengan melakukan pointer ke const seperti diperlihatkan berikut:

Contoh 3:

#include <stdio.h>

 

int main()

{

const char *s = "kuis";

printf("%lu", sizeof(s));

return 0;

}


Komentar

  1. Ada yang bisa beritahu kenapa output dari contoh 2 adalah 8?

    BalasHapus
    Balasan
    1. Ukuran dari pointer adalah 8 pada komputer 64 bit dan 4 pada 32 bit.

      Hapus
    2. Ukuran dari variabel pointer apapun adalah 8.

      Hapus
  2. Dari apa yang saya baca sebelumnya, saya pikir char *s adalah pointer ke array karakter, dan sebagai array karakter, sifatnya adalah masih bisa dimodifikasi lagi. Tolong jelaskan lebih banyak lagi tentang bagian literal string dengan tautan bacaan lebih lanjut.

    BalasHapus
    Balasan
    1. char (*s)[]; --> ini adalah contoh pointer array karakter.

      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