Lompat ke konten Lompat ke sidebar Lompat ke footer

Penggunaan Char pada Bahasa C

Pada artikel ini akan dijelaskan perbedaan antara penggunaan char s[] dan char *s pada program bahasa C, yakni sebagai berikut:


Penggunaan Char pada Bahasa C
Ilustrasi Char Bahasa C

Sebelum memahami materi tentang Penggunaan Char pada Bahasa C, terlebih dahulu pelajari materi tentang: Petik Tunggal dan Ganda pada Array Char Bahasa C [klik]Membuat Array Multidimensi Bahasa C dan Fungsinya [klik], dan Strcat dan Strcmp Bahasa C dan Fungsinya [klik].

Perhatikan dua statement berikut dalam bahasa C. Apakah perbedaan dari kedua statement tersebut?
  • statement1: char s[] = "kuis";
  • statement2: 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[] adalah "kuis1"' yang digunakan untuk menciptakan karakter array yang sama seperti array yang lainnya dan dapat melakukan semua jenis operasi array yang terdapat didalamnya. Hanya saja, hal yang spesial dari statement array tersebut adalah proses inisialisasi yang dilakukan adalah menggunakan empat elemen dengan ukurannya adalah 5, dimana kompilator akan secara otomatis menambahkan karakter '\0' pada program yang dijalankan.

Contoh:

#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 pada sebagian besar kompilator program bahasa C. 

Pada standar bahasa C dan bahasa C++, string literal memiliki durasi penyimpanan bertipe static, dimana setiap upaya yang digunakan untuk memodifikasi yang dilakukan akan memberikan behavior yang nilainya tidak terdefinisi, sedangkan variabel s pada statement kedua, hanyalah merupakan pointer yang berfungsi untuk menyimpan alamat dari string literal.

Contoh:

#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 pesan "warning: deprecated conversion from string constant to 'char*'". Peringatan tersebut terjadi karena nilai s bukan merupakan nilai dalam bentuk pointer const, melainkan berupa variabel yang menyimpan alamat lokasi yang bersifat read-only. Peringatan tersebut dapat dihindari dengan dengan cara melakukan pembuatan pointer ke const seperti diperlihatkan pada contoh berikut:

Contoh:

#include <stdio.h>

 

int main()

{

const char *s = "kuis";


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


return 0;

}


Artikel ini didedikasikan kepada: Siska Rahma Sari, Tri Angga Wijayanto, Utari Hadi Novitasari, Windi Wandira, dan Yustian Dewi Krismarani.

5 komentar untuk "Penggunaan Char pada Bahasa C"

  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

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 -