Pointer sederhananya adalah sebuah variable yang menyimpan alamat memory dari suatu variable lain. Tetapi ada yang unik dari pointer ini. Jadi ketika saya belajar pointer dengan tipe data yang ada di C++ (integer, float) tidak ada masalah kecuali tipe data char. Unik karena cara kerjanya beda dari tipe data seperti integer, float.
Kita bahas dulu aja dari mulai awal pointer.
![](../assets/images/07_charpointer/draw1.png)
Seperti pada gambar di atas, ketika kita ingin membuat pointer, maka kita harus menggunakan tanda bintang (*) lalu diikuti nama variable pointernya. Tanda and (&) ini digunakan untuk mengakses memory dari variable "age". Jadi variable "agePtr" menyimpan memory dari variable "age".
Bagaimana ketika kita ingin mengakses nilai variable "age" dengan menggunakan variable pointer "agePtr"?
Untuk mengakses nilai dari dengan menggunakan variable pointer adalah dengan menggunakan tanda bintang (*) lagi ketika melakukan print. Contohnya seperti di bawah ini..
![](../assets/images/07_charpointer/image-1.png)
Ini sama ketika tipe datanya floating juga. Tetapi ada sedikit unik dengan tipe data char.
![](../assets/images/07_charpointer/image-2.png)
Lihat guyss, error. Padahal ketika kita menerapkan pointer di tipe data integer ini tidak ada error. Tapi ketika digunakan di tipe data char kenapa bisa error?
Sekarang kita akan coba hapus tanda and (&) pada value dari variable firstNamePtr.
![](../assets/images/07_charpointer/image-3.png)
Code di atas tidak ada error. Tapi kenapa variable "firstNamePtr tidak menggunakan tanda and (&)?
Variable "firstName" di atas adalah sebuah string, string itu adalah kumpulan dari character. Dari hasil baca baca dari internet, variable char yang kita define di sebuah pointer, sebenarnya dia sudah menyimpan alamat memory dari character pertama tanpa kita harus menggunakan tanda and (&).
![](../assets/images/07_charpointer/image-4.png)
Ketika saya mencoba melakukan print alamat memory dengan menggunakan looping, output dari code tersebut adalah seperti ini.
![](../assets/images/07_charpointer/image-5.png)
Jadi dia tuh ketika kita define pointer yang mengarah ke sebuah character array, dia sudah menyimpan alamat memory character pertama. Nah di C++ itu akan melakukan print sampai loopingnya itu mencapai karakter terakhir yaitu "\0". Makanya ketika kita print biasa 1x maka akan print semua character.
Okee, sekarang kita akan bahas tentang perbedaan char[] & char * .
char[] (Character Array) sederhananya adalah array dari tipe data char untuk menyimpan character character sehingga membentuk string. char[] ini value tiap index bisa kita ganti atau sederhananya char[] ini support read & write.
![](../assets/images/07_charpointer/image-6.png)
Pada gambar di atas value dari index ke 0 diganti nilainya menjadi karakter 'D'.
char * adalah pointer to character yang menunjuk character pertama dalam character array. char * ini value tiap index tidak bisa di ganti atau read only.
![](../assets/images/07_charpointer/image-7.png)
Referensi dari sini.
![](../assets/images/07_charpointer/image-8.png)
Example: Allocation Type: Read/Write: Storage Location: Memory Used (Bytes): =========================================================================================================== const char* str = "Stack"; Static Read-only Code segment 6 (5 chars plus '\0') char* str = "Stack"; Static Read-only Code segment 6 (5 chars plus '\0') char* str = malloc(...); Dynamic Read-write Heap Amount passed to malloc char str[] = "Stack"; Static Read-write Stack 6 (5 chars plus '\0') char strGlobal[10] = "Global"; Static Read-write Data Segment (R/W) 10
Dah ges segitu aja :)