Lompat ke konten Lompat ke sidebar Lompat ke footer

Perbedaan Antara const char *p, char * const p, dan const char * const p Bahasa C

Terdapat beberapa bentuk penggunaan antara keyword const dan operator '*' pada penggunaan pointer pada bahasa C.

Sebelum memahami lebih dalam materi tentang Perbedaan Antara const char *p, char * const p, dan const char * const p Bahasa C, terlebih dahulu pelajari materi tentang: Keyword Restrict Bahasa C Beserta Penjelasannya, Linked List Bahasa C Beserta Fungsi dan Penjelasannya, dan Pointer Near, Far, dan Huge Bahasa C Beserta Penjelasannya.

Qualifier const merupakan bentuk keyword yang dapat diterapkan ke deklarasi dari jenis variabel spesifik apapun dengan nilai yang telah ditetapkan sebelumnya tidak akan berubah atau tetap. Keyword const akan menerapkan apapun yang telah ditetapkan sebelumnya pada bagian kiri, jika tidak terdapat nilai apapun pada bagian kiri, maka keyword tersebut secara otomatis akan menerapkan apapun yang terdapat pada bagian kanan.

const char *ptr: merupakan sebuah pointer yang menuju ke karakter konstanta, dimana nilai dari konstanta yang ditunjuk oleh pointer tidak dapat diubah pointer pointer ptr, namun pointer yang menunjuk dapat diubah nilainya. "const char *" adalah sebuah pointer non konstanta yang menuju ke sebuah konstanta tipe char.

Contoh:

// Program Bahasa C untuk

// ilustrasi penggunaan char

// const *p.

#include<stdio.h>

#include<stdlib.h>


int main()

{

char a ='A', b ='B';


const char *ptr = &a;

//*ptr = b; merupakan

// statement ilegal karenna

// memberikan penugasan dari

// lokasi read-only*ptr. 



// Sedangkan ptr dapat diubah.

printf( "value pointed to by ptr: %c\n", *ptr);

ptr = &b;


printf( "value pointed to by ptr: %c\n", *ptr);

}

Output:
value pointed to by ptr:A
value pointed to by ptr:B


Catatan: Tidak terdapat berbedaan antara const char *p dan char const *p, karena keduanya adalah sama-sama pointer ke sebuah konstanta tipe char dan poisisi dari '*'(asterik) adalah bernilai sama.

char *const ptr: merupakan sebuah pointer konstanta yang menuju ke karakter non konstanta, dimana nilai konstanta yang dituju tidak dapat diubah oleh pointer ptr.

Contoh:

// Program Bahasa C untuk

// ilustrasi penggunaan char*

// const p.

#include<stdio.h>

#include<stdlib.h>


int main()

{

char a ='A', b ='B';

char *const ptr = &a;


printf( "Value pointed to by ptr: %c\n", *ptr);


printf( "Address ptr is pointing to: %d\n\n", ptr);


// ptr = &b; adalah statement

// ilegal yang memberikan

// penugasan dari variabel ptr

// yang bersifat read-only.



// Mengubah nilai pada bagian

// alamat yang ditunjuk oleh

// pointer ptr.

*ptr = b;


printf( "Value pointed to by ptr: %c\n", *ptr);


printf( "Address ptr is pointing to: %d\n", ptr);

}

Output:
Value pointed to by ptr: A
Address ptr is pointing to: -1443150762
Value pointed to by ptr: B
Address ptr is pointing to: -1443150762


Catatan: Pointer akan selalu menunjuk ke nilai alamat yang sama, dimana yang berubah hanyalah nilai dari lokasinya saja.

Baca Juga:

const char * const ptr: merupakan sebuah pointer konstanta yang menuju ke karakter konstanta, dimana dapat dilakukan berubahan nilai terhadap variabel yang ditunjuk, sekaligus dapat dilakukan perubahan terhadap pointer yang menunjuk.

Contoh:

// Program Bahasa C untuk

// ilustrasi penggunaan const

// char * const ptr.

#include<stdio.h>

#include<stdlib.h>


int main()

{

char a ='A', b ='B';


const char *const ptr = &a;


printf( "Value pointed to by ptr: %c\n", *ptr);


printf( "Address ptr is pointing to: %d\n\n", ptr);


// ptr = &b; merupakan

// statement ilegal yang

// memberikan penugasan dari

// variabel ptr yang bersifat

// read-only.



// *ptr = b; merupakan

// statement ilegal  yang

// memberikan penugasan dari

// lokasi *ptr yang bersifat // read-only.

}

Output:
Value pointed to by ptr: A
Address ptr is pointing to: -255095482


Catatan: char const * const ptr adalah bernilai sama dengan const char *const ptr.

Dalam pemrograman Bahasa C, pemahaman tentang penggunaan pointer sangat penting, terutama ketika konsep modifikasi nilai atau alamat yang ditunjuk oleh pointer diperkenalkan. Pointer sering digunakan untuk mereferensikan lokasi memori yang menyimpan data tertentu, tetapi pengaturan modifikasi pada pointer bisa membingungkan. Tiga bentuk pointer yang sering ditemui adalah `const char *p`, `char * const p`, dan `const char * const p`. Ketiganya memiliki perbedaan fundamental terkait dengan fleksibilitas dalam mengubah data yang ditunjuk atau alamat yang disimpan oleh pointer.  

Pointer dengan deklarasi `const char *p` mengindikasikan bahwa data yang ditunjuk bersifat konstan, tetapi alamat yang disimpan di pointer masih bisa diubah. Dalam hal ini, pointer dapat diarahkan ke lokasi memori lain, namun isi dari data yang ditunjuk tidak dapat dimodifikasi melalui pointer tersebut. Pendekatan ini sering digunakan ketika data yang ditunjuk seharusnya tidak diubah setelah referensi dibuat, tetapi ada kebutuhan untuk memindahkan pointer ke lokasi memori yang berbeda. Contoh umum penggunaannya dapat ditemukan dalam fungsi yang menerima string literal sebagai argumen, dimana modifikasi langsung pada data string harus dicegah demi menjaga integritas data.

Deklarasi `char * const p` berbeda dalam arti bahwa alamat yang disimpan oleh pointer bersifat konstan, tetapi data yang ditunjuk masih dapat dimodifikasi. Dengan kata lain, pointer itu sendiri menjadi konstan, sehingga tidak dapat diarahkan ulang ke lokasi memori lain, tetapi data yang direferensikan oleh pointer tetap fleksibel untuk diubah. Penggunaan jenis pointer ini sering bermanfaat ketika terdapat keperluan untuk memastikan bahwa pointer tetap menunjuk ke lokasi memori tertentu selama siklus hidupnya, tetapi ada kebutuhan untuk memanipulasi isi dari data yang direferensikan. Hal ini relevan dalam situasi dimana stabilitas alamat penting untuk logika program, seperti dalam struktur data yang mengandalkan lokasi memori tetap.

Deklarasi `const char * const p` menggabungkan kedua sifat di atas, dimana baik data yang ditunjuk maupun alamat yang disimpan dalam pointer bersifat konstan. Dalam bentuk ini, pointer menjadi entitas yang sepenuhnya tidak dapat diubah setelah inisialisasi awal. Hal ini berarti bahwa pointer akan selalu menunjuk ke lokasi memori yang sama, dan data yang ditunjuk juga tidak dapat diubah. Penggunaan pointer jenis ini sering diterapkan dalam situasi dimana diperlukan keamanan tingkat tinggi terhadap perubahan baik pada alamat maupun data. Contoh penggunaannya dapat ditemukan dalam sistem embedded atau aplikasi kritikal lainnya dimana integritas data dan stabilitas alamat menjadi prioritas utama.

Setiap deklarasi memiliki manfaat dan batasannya sendiri. Misalnya, `const char *p` menawarkan fleksibilitas dengan kemampuan mengubah referensi, tetapi membatasi perubahan data untuk melindungi nilai aslinya. Pendekatan ini cocok untuk pengolahan data yang sifatnya hanya-baca, seperti teks atau konfigurasi yang tidak boleh dimodifikasi oleh fungsi atau blok kode yang menerima pointer tersebut. Di sisi lain, `char * const p` memberikan kontrol terhadap stabilitas alamat, yang sangat penting dalam aplikasi dimana lokasi memori memiliki makna khusus atau kaitannya dengan struktur program. Kombinasi dari kedua sifat ini dalam `const char * const p` menawarkan keamanan maksimum, meskipun dengan pengorbanan fleksibilitas dalam penggunaannya.

Memahami perbedaan ini sangat penting dalam pengembangan perangkat lunak yang efisien dan aman. Dengan mengetahui kapan dan bagaimana menggunakan masing-masing jenis pointer, pengembang dapat mengurangi risiko kesalahan dalam manipulasi memori, seperti kebocoran memori atau perubahan data yang tidak disengaja. Pointer yang salah digunakan sering menjadi penyebab bug yang sulit dilacak, terutama dalam aplikasi yang kompleks. Dengan pendekatan yang benar, pengembang dapat memastikan bahwa pointer dideklarasikan sesuai dengan kebutuhan logis program dan memberikan keamanan tambahan terhadap perubahan yang tidak diinginkan.

Konsep-konsep ini juga memperkenalkan elemen penting dalam pemrograman defensif, dimana kode ditulis untuk meminimalkan potensi kesalahan meskipun dalam kondisi yang tidak terduga. Dalam hal ini, penggunaan konstanta dalam pointer dapat dianggap sebagai bagian dari strategi untuk mengunci perilaku tertentu pada level kompilasi, sehingga meminimalkan kemungkinan kesalahan runtime. Hal ini sejalan dengan prinsip desain perangkat lunak yang menekankan stabilitas dan prediktabilitas.

Selain itu, pemahaman terhadap perbedaan ini juga berkontribusi pada pengelolaan sumber daya yang lebih baik. Dalam aplikasi yang membutuhkan pengelolaan memori manual, seperti yang sering terjadi dalam pengembangan sistem atau aplikasi embedded, kesalahan dalam penggunaan pointer dapat mengakibatkan masalah serius seperti korupsi data atau perilaku yang tidak dapat diprediksi. Dengan memilih deklarasi pointer yang tepat, pengembang dapat mengurangi risiko ini dan memastikan bahwa program berjalan sesuai dengan yang diharapkan.

Kesimpulannya, perbedaan antara `const char *p`, `char * const p`, dan `const char * const p` berakar pada kendali yang diberikan kepada pengembang terhadap modifikasi data atau alamat pointer. Dengan memahami sifat dan batasan masing-masing jenis deklarasi ini, pengembang dapat menulis kode yang lebih aman, efisien, dan mudah dipelihara. Pengetahuan ini tidak hanya relevan bagi yang bekerja pada tingkat sistem rendah, tetapi juga dalam pengembangan aplikasi yang memanfaatkan struktur data yang kompleks atau membutuhkan integritas data yang tinggi.

Artikel ini didedikasikan kepada: Agus Wulansari, Ahmad Choirul Umam, Alif Kusuma Dharu, Ana Sofiana, dan Anggreani Eka Lestari.

5 komentar untuk "Perbedaan Antara const char *p, char * const p, dan const char * const p Bahasa C"

  1. Apa yang dimaksud dengan Const char *P pada bahasa C?

    BalasHapus
    Balasan
    1. Const char *p merupakan sebuah pointer yang menuju ke karakter konstan.

      Hapus
    2. Pointer Const char *p memiliki makna bahwa nilai yang disimpan dalam pointer tersebut tidak dapat dilakukan perubahan nilainya.

      Hapus
    3. Ponter dapat digunakan untuk mengakses nilai karakter data, tetapi data yang diakses itu sendiri tidak dapat dilakukan modifikasi nilai.

      Hapus
    4. Pointer Const char *p berguna untuk menyimpan jenis string karakter yang nilainya tidak dapat atau tidak boleh diubah.

      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 -