3 Contoh Perbedaan Antara Char s[] dan Char *s pada Bahasa C
- char s[] = "kuis";
- char *s = "kuis";
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:
#include <stdio.h>
int main()
{
char s[] = "kuis";
printf("%lu", sizeof(s));
s[0] = 'j';
printf("\n%s", s);
return 0;
}
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.
#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;
}
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:
#include <stdio.h>
int main()
{
const char *s = "kuis";
printf("%lu", sizeof(s));
return 0;
}
Ada yang bisa beritahu kenapa output dari contoh 2 adalah 8?
BalasHapusUkuran dari pointer adalah 8 pada komputer 64 bit dan 4 pada 32 bit.
HapusUkuran dari variabel pointer apapun adalah 8.
HapusDari 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.
BalasHapuschar (*s)[]; --> ini adalah contoh pointer array karakter.
Hapus