Saya perhatikan beberapa orang menggunakan notasi berikut untuk mendeklarasikan variabel pointer.
(a) char* p;
dari pada
(b) char *p;
Saya menggunakan (b). Apa alasan di balik notasi (a)? Notasi (b) lebih masuk akal bagi saya karena penunjuk karakter bukanlah tipe itu sendiri. Sebaliknya jenisnya adalah karakter dan variabel mungkin merupakan penunjuk ke karakter tersebut.
char* c;
Sepertinya ada tipe char * dan variabel c adalah tipe itu. Tapi sebenarnya tipenya adalah char dan * c (lokasi memori yang ditunjukkan oleh c) adalah tipe itu (char). Jika Anda mendeklarasikan beberapa variabel sekaligus, perbedaan ini menjadi jelas.
char* c, *d;
Ini terlihat aneh. Baik c dan d adalah jenis penunjuk yang sama yang mengarah ke karakter. Dalam hal ini sejak yang berikutnya terlihat lebih alami.
char *c, *d;
Terima kasih.
sumber
char *t
terlihat pantas, jadi saya mungkin melakukannyachar * t;
. Namun, saya sudah sering melihatnyachar* t;
juga.char
dan (a) menunjukkan p adalah apointer to a char
Jawaban:
Bjarne Stroustrup berkata:
Sumber: http://www.stroustrup.com/bs_faq2.html#whitespace
Saya akan merekomendasikan gaya yang terakhir karena dalam situasi di mana Anda mendeklarasikan beberapa pointer dalam satu baris (contoh ke-4 Anda), memiliki tanda bintang dengan variabel akan menjadi apa yang biasa Anda gunakan.
sumber
int *p
:, yang berarti: ketikap
dereferensi saya mendapatkanint
. Kemudian beberapa deklarasi dipisahkan oleh,
masuk akal:int *p, *q, r
(ketikap
atauq
didereferensi saya mendapatkanint
, ketikar
direferensikan saya mendapatkanint
). Juga, sintaks penunjuk fungsi masuk akal:int (*f)()
(ketikaf
didereferensi dan dipanggil I get anint
). Dan ini masuk akal:int *p, (*f)()
.int*
. Bagi saya,int *p, (*f)()
itu tidak masuk akal, tetapi saya bisa melihat bagaimana itu akan terjadi pada beberapa orang dalam beberapa situasi.void*
(dan tidak berfungsi sama sekali untuk referensi C ++).Saya pribadi lebih suka menempatkan
*
dengan tipe lainnyachar* p; // p is a pointer to a char.
Orang-orang akan berdebat "tapi kemudian
char* p, q;
menjadi menyesatkan", yang saya katakan, "jadi jangan lakukan itu".sumber
cout << *p;
. Jadi mengapa tidak menempatkan bintang sebelump
saat deklarasi:*p
? Menurut saya itu tidak terlalu membingungkan.Tidak ada perbedaan cara menulis. Tetapi jika ingin mendeklarasikan dua atau lebih pointer dalam satu baris lebih baik menggunakan (b) varian, karena sudah jelas apa yang diinginkan. Lihat ke bawah:
int *a; int* b; // All is OK. `a` is pointer to int ant `b` is pointer to int char *c, *d; // We declare two pointers to char. And we clearly see it. char* e, f; // We declare pointer `e` and variable `f` of char type. // Maybe here it is mistake, maybe not. // Better way of course is use typedef: typedef char* PCHAR; PCHAR g, h; // Now `g` and `h` both are pointers. // If we used define construction for PCHAR we'd get into problem too.
sumber
typedef
bukan cara yang lebih baik "tentu saja". Beberapa orang mungkin lebih suka, tetapi bermasalah jika ada beberapa orang yang bekerja dengan kode Anda. Jika saya tidak terbiasaPCHAR
, saya mungkin menulis sesuatu sepertiPCHAR *p;
, yang akan menjadichar**
dan bukan yang saya inginkan. Secara umum, jika Anda menginginkan achar**
, Anda harus menulisPCHAR*
atau mendefinisikan tipe baru, dan kemudian itu mulai menjadi bodoh.Komprominya adalah
char * p;
K&R menggunakan
char *p;
Terserah Anda kecuali Anda mengikuti standar pengkodean - dalam hal ini, Anda harus mengikuti apa yang dilakukan orang lain.
sumber
char* p;
. ini masalah gaya, bukan konvensi atau aturan. bagi saya lebih masuk akal bahwa p adalah tipechar*
, jadi jelas * harus dengan tipe.clang-format
tetap menggunakan .Ini semua adalah masalah preferensi, secara pribadi pada proyek yang saya lihat karakternya * Saya cenderung mendeklarasikan banyak petunjuk pada baris terpisah. Tidak ada cara yang benar-benar "benar" untuk melakukan ini dan semuanya tergantung pada preferensi. Beberapa orang mengatakan lebih mudah untuk membaca (a) sementara yang lain mengatakan bahwa (b) lebih mudah untuk mendeklarasikan lebih banyak variabel dari tipe yang sama pada baris yang sama.
Saya menemukan (b) lebih umum, dan dalam beberapa kasus saya telah melihat
char * a;
atau sesuatu seperti ini. Sekali lagi preferensi. Apa pun yang Anda sukai atau apa pun proyek yang saya kerjakan akan saya gunakan (kecuali saya menulisnya sendiri dalam hal ini saya menggunakan (a))
sumber