Apa metode favorit Anda untuk mendeklarasikan pointer?
int* i;
atau
int *i;
atau
int * i;
atau
int*i;
Tolong jelaskan mengapa.
lihat juga: http://www.stroustrup.com/bs_faq2.html#whitespace
c
coding-style
pointers
lesmana
sumber
sumber
int*i;
- ruang putih tidak tumbuh di pohon, kau tahu ...Jawaban:
Jika Anda menulis:
Anda menyesatkan menyarankan bahwa semua i, j dan k adalah petunjuk
int
.Jadi saya berpendapat itu lebih baik untuk menambahkan * ke nama variabel.
sumber
int * i;
adalah non-pesaing hanya karena kelihatannya seperti perkalian sekilas.int*
dianggap sebagai tipe, danint* i, j
menyatakan dua pointer. Pertanyaannya bisa dianggap tidak lengkap - itu tergantung pada bahasa yang Anda gunakan gaya mana yang masuk akal. Di CI followint *x
, di C # saya lakukan sebaliknya.Saya lebih suka
int* i
karenai
memiliki tipe "pointer ke int", dan saya merasa ini membuatnya seragam dengan sistem tipe. Tentu saja, perilaku yang terkenal datang, ketika mencoba untuk mendefinisikan beberapa pointer pada satu baris (yaitu, tanda bintang harus diletakkan sebelum setiap nama variabel untuk mendeklarasikan pointer), tapi saya tidak menyatakan pointer seperti ini. Juga, saya pikir itu adalah kerusakan parah dalam bahasa gaya-C.sumber
*i
memiliki jenisint
.Untuk C, di mana kami tidak memiliki fokus yang kuat pada tipe, saya lebih suka:
int *i;
Karena memiliki penekanan pada
int
, bukan pointer. Apa ituint
?*i
adalah int.sumber
int i = 5
, untuk mendapatkan nilaii
, Anda menggunakan namanyai
. Demikian juga, jika sudahint *i; *i = 5
, maka untuk mendapatkan nilainya, Anda gunakan*i
.Saya lebih suka
int* i
selama bertahun-tahun. Namun, ada argumen kuatint *i
karena ketika menggunakan gaya sebelumnya, Anda masih harus mengingat beberapa aturan deklarasi:Karena Anda harus mengingat aturan ini, Anda tidak memperoleh apa pun secara sederhana — tetapi saya juga tidak akan mengatakan itu lebih rumit. Menghindari banyak deklarasi pada satu baris hanyalah cara lain untuk mengatakan Anda mengingat aturan ini. Perbedaan antara kedua gaya adalah moot.
Bahkan ketika saya menggunakannya, rasanya agak konyol untuk menganggap sintaks deklarasi C bekerja selain dari itu, dengan menempatkan tanda bintang di sebelah tipe daripada variabel yang terikat secara sintaksis.
Saya tidak membeli ke salah satu yang menekankan jenis pointer (untuk
i
) sementara yang lain menekankan tipe int (untuk*i
), tapi itu mungkin bahwa setelah 15 tahun C dan C ++ digunakan, itu hanya merupakan ketika saya melihat itu, tanpa harus memikirkannya— —sebagian besar pemula yang menanyakan pertanyaan ini belum dapat melakukannya.Juga, meskipun diberi preferensi saya, saya tidak merasa canggung untuk membaca / menulis kode dengan gaya lain. Konsistensi, bla bla bla.
Bahkan tidak perlu disebutkan
int * i
.sumber
Saya lebih suka yang pertama. Menjadi alami karena menjadi pointer adalah bagian dari tipenya.
Saat saya menggunakan C #, ia menangani jenis dengan cara yang lebih intuitif daripada C, jadi tidak ada masalah mendeklarasikan beberapa petunjuk dalam pernyataan yang sama:
sumber
Saya lebih suka
int* i
(gaya C ++).Saya menghindari mendeklarasikan beberapa variabel dalam satu pernyataan karena ambiguitas visual yang dihasilkan (
int* i, j
).Lihat juga FAQ Gaya dan Teknik C ++ dari Bjarne Stroustrup untuk alasan-alasannya.
sumber
Jika Anda ingin mendeklarasikan beberapa variabel tetapi tidak ingin mengulang tanda bintang:
(Seperti yang Anda lihat di dalam template struct, saya lebih suka
int* i
gaya.)Dan inilah solusi yang lebih umum:
Yang ini bekerja dengan "tipe bermasalah" apa pun, misalnya array dan referensi:
sumber
typedef int* int_ptr
akan melakukan trik. Tentu, saya harus mendeklarasikan typedef baru untuk tipe pointer yang berbeda, tetapi dalam praktiknya berapa banyak? Paling banyak delapan?Saya akan menggunakan
int* i;
karena bagian pertama menunjukkan tipe variabel (pointer ke int), sedangkan bagian kedua menunjukkan nama (i
). Tidak masuk akal bagi saya bahwa tipenyaint
dan namanya*i
. Juga,int * i;
tampak seperti multiplikasi bagi saya.sumber
Dalam deklarasi yang saya gunakan
int * i;
, Anda membacanya sebagaii is a pointer to an integer
.Pointer berkontribusi untuk tipe dan variabel sehingga harus di tengah.
Merupakan hal yang baik untuk menghindari menyatakan banyak hal pada baris yang sama:
int * i, j;
sumber
Saya benar-benar menggunakan ketiga konvensi dalam keadaan tertentu. Pada pandangan pertama saya sepertinya tidak konsisten, tapi ...
int *
ketika pengenal tidak ada, untuk memperkuat secara visual bahwa nama itu tidak ada.int* intptr
padatypedef
s dan deklarasi serupa untuk secara visual memperkuat bahwa itu adalah bagian dari tipenya. Demikian pula dengan deklarasi fungsi pointer:(int* (*foo)(int))
int *identifier
danclass &identifier
pada parameter fungsi untuk memperkuat secara visual bahwa parameter tersebut berpotensi sebagai parameter yang disebut "keluar".const int * const * const
setiap kali saya menggunakan kualifikasi cv .int * foo;
pada deklarasi lokal.Saya kira saya agak berorientasi visual.
sumber
Tidak ada tipe pointer di C! Jadi, "int *" tidak ada artinya. Tanda bintang selalu terikat pada elemen yang dituliskan dengan benar, itu milik elemen yang berhak atasnya. "* i" adalah sebuah int. Dan karena * i adalah sebuah int, maka saya adalah pointer ke int. Itulah logika di baliknya dan itulah mengapa "int * i" adalah satu-satunya solusi yang mungkin. Yang lainnya adalah ilusi (yang secara otomatis dikoreksi oleh kompiler dalam banyak kasus). Dalam C ++ dan C # itu sesuatu yang berbeda. Tetapi untuk C hanya ada satu Alkitab: "Dennis M. Ritchie: The C Programming Language". Dennis (RIP!) Menulisnya: "int * i". Tidak perlu mempertanyakan ini.
sumber
int*
adalah tipe pointer.Saya menggunakan
int *i
karena lebih mudah untuk melihat bahwa itu adalah pointer, meskipun saya pikir itu tidak masalah.sumber