it-swarm-id.com

int * i; atau int * i; atau int * i;

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

30
lesmana

Jika Anda menulis:

int* i, j, k;

anda secara keliru menyarankan bahwa semua i, j dan k adalah petunjuk untuk int.

Jadi saya berpendapat itu lebih baik untuk menambahkan * ke nama variabel.

76
Randall Schulz

Saya lebih memilih int* i karena i memiliki tipe "pointer to int", dan saya merasa ini membuatnya seragam dengan sistem tipe. Tentu saja, perilaku terkenal datang, ketika mencoba 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.

62
Tamás Szelei

Untuk C, di mana kami tidak memiliki fokus yang kuat pada tipe, saya lebih suka:

int *i;

Karena ia memiliki penekanan pada int, bukan pointer. Apa int itu? *i adalah int.

23
alternative

Saya lebih suka int* i selama bertahun-tahun. Namun, ada argumen kuat untuk int *i karena ketika menggunakan gaya sebelumnya, Anda masih harus mengingat beberapa aturan deklarasi:

int* a, *b; // not int* a, b;

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 yang satu menekankan jenis pointer (untuk i) sementara yang lain menekankan tipe int (untuk *i), tapi itu mungkin setelah 15 tahun penggunaan C dan C++, itu hanya adalah ketika saya melihatnya, tanpa harus memikirkan itu— —sebagian besar pemula yang menanyakan pertanyaan ini belum bisa melakukannya.

Juga, walaupun diberikan preferensi saya, saya tidak merasa canggung untuk membaca/menulis kode dengan gaya lain. Konsistensi, bla bla bla.

Bahkan tidak perlu menyebutkan int * i.

7
Roger Pate

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:

int* a, b, c; // three pointers
6
Guffa

Saya lebih memilih int* i (Gaya C++).
Saya menghindari mendeklarasikan banyak variabel dalam satu pernyataan karena ambiguitas visual yang dihasilkan (int* i, j).

Lihat juga FAQ Gaya dan Teknik C++ Bjarne Stroustrup untuk alasan.

5
Archimedix

Jika Anda ingin mendeklarasikan beberapa variabel tetapi tidak ingin mengulang tanda bintang:

template <typename T>
struct pointer_to
{
    typedef T* type;
};

pointer_to<int>::type p1, p2, p3;

(Seperti yang Anda lihat di dalam template struct, saya lebih suka int* i gaya.)

Dan inilah solusi yang lebih umum:

template <typename T>
struct identity
{
    typedef T type;
};

identity<int*>::type p1, p2, p3;

Yang ini bekerja dengan "tipe bermasalah" apa pun, misalnya array dan referensi:

identity<int[10]>::type a1, a2, a3;

identity<int&>::type r1(*p1), r2(*p2), r3(*p3);
4
fredoverflow

Saya akan pergi untuk int* i; karena bagian pertama menunjukkan tipe variabel (penunjuk ke int), sedangkan bagian kedua menunjukkan nama (i). Tidak masuk akal bagi saya bahwa tipenya adalah int dan namanya *i. Juga, int * i; terlihat agak seperti perkalian bagi saya.

2
Allon Guralnek

Dalam deklarasi saya menggunakan int * i;, Anda membacanya sebagai i 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;

2
Tamara Wijsman

Saya benar-benar menggunakan ketiga konvensi dalam keadaan tertentu. Sekilas saya sepertinya tidak konsisten, tapi ...

  • int * ketika pengenal tidak ada, untuk memperkuat secara visual bahwa nama itu tidak ada.
  • int* intptr on typedefs dan deklarasi serupa untuk memperkuat bahwa itu adalah bagian dari tipe. Demikian pula dengan deklarasi fungsi pointer: (int* (*foo)(int))
  • int *identifier dan class &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 c-v kualifikasi.
  • int * foo; pada deklarasi lokal.

Saya kira saya agak berorientasi visual.

1
greyfade

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 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 kebanyakan kasus). Dalam C++ dan C # itu sesuatu yang berbeda. Tetapi untuk C hanya ada satu Alkitab: "Dennis M. Ritchie: The C Programming Language". Dennis (R.I.P.!) Menulisnya: "int * i". Tidak perlu mempertanyakan ini.

1
Lexi Pim