Ini mungkin pertanyaan sederhana, tetapi mengapa const char * tidak memerlukan alamat memori untuk menunjuk?
Contoh:
const char* a = "Anthony";
dan tidak:
const char *a = // Address to const char
seperti jenis lainnya lakukan?
c++
c
implicit-conversion
c-strings
string-literals
Weidelix
sumber
sumber
Jawaban:
Anda bisa bayangkan deklarasi ini
cara berikut
Yaitu kompiler membuat array karakter dengan durasi penyimpanan statis yang menyimpan string
"Anthony"
dan alamat karakter pertama array (karena konversi implisit dari penunjuk array ke pointer ke karakter pertama mereka) ditugaskan ke pointera
.Berikut adalah program demonstratif yang menunjukkan bahwa literal string adalah array karakter.
Output program adalah
Ukuran string literal (dari array yang menyimpan string literal) sama dengan
8
karena string juga menyertakan karakter nol terminating '\0'
.Dalam program demonstratif ungkapan
dapat diganti hanya dengan ungkapan
sumber
Itu benar.
Seperti C-string literal
adalah membusuk ke alamat yang 1 st karakter. Seperti, BTW; setiap array di C tidak.
sumber
const char[8]
(dalam C ++, mungkinchar [8]
dalam C, tidak yakin) dan seperti semua array built-in, ketika menggunakannya sebagai nilai itu meluruh ke pointer ke elemen pertama.char [8]
di C: c-faq.com/ansi/strlitnotconst.htmlItu memang membutuhkan alamat memori, dan MEMILIKI alamat memori. Dalam contoh Anda itu hanyalah alamat memori dari awal string. Itu sama dengan variabel array lainnya yang diinisialisasi pada waktu kompilasi, misalnya "int array [] = {0, 1, 2, 3};".
Jika Anda menggunakan editor biner untuk melihat executable, Anda akan melihat string "Anthony" di sana. Jika Anda meletakkan baris "printf (" a di% p \ n ", (void *) a);" di program Anda, lalu kompilasi & jalankan, Anda akan melihat alamatnya.
sumber
Bahkan, memang perlu alamat memori untuk menunjuk.
const char* a
berartia
adalah penunjuk ke string literal atau konstanta karakter.Pointer selalu memerlukan alamat untuk menunjuk karena itu adalah sifat pointer untuk menunjuk ke objek tertentu dalam memori. Jadi,
a
dan pointer lainnyaconst char
juga.String literal seperti
"Hi My Name is Alfred!"
oleh penugasan seperti:meluruh ke pointer ke alamat elemen pertama dari string literal.
Berarti pada gilirannya,
a
akan diberikan oleh alamat dari elemen pertama dari string literal"Hi My Name is Alfred!"
yang dapat disimpan di mana saja dalam memori tergantung pada lingkungan eksekusi.Ini bukan dalam kekuatan seorang programmer di mana string literal persis disimpan. Tugas Anda hanya untuk menetapkan dan menangani masing-masing pointer dengan tepat.
sumber