Saya menemukan beberapa kode yang mengandung yang berikut:
struct ABC {
unsigned long array[MAX];
} abc;
Kapan masuk akal untuk menggunakan deklarasi seperti ini?
c
arrays
coding-style
struct
Joe.Z
sumber
sumber
Keuntungan lainnya adalah ia mengabstraksi ukurannya sehingga Anda tidak perlu menggunakan
[MAX]
seluruh kode Anda di mana pun Anda mendeklarasikan objek semacam itu. Ini juga bisa dicapai dengantetapi kemudian Anda memiliki masalah yang jauh lebih besar: Anda harus sadar akan hal itu
ABC
adalah tipe array (walaupun Anda tidak dapat melihat ini ketika Anda mendeklarasikan variabel tipeABC
) atau Anda akan tersengat oleh fakta bahwa ituABC
akan berarti sesuatu yang berbeda dalam daftar argumen fungsi versus dalam deklarasi / definisi variabel.Satu lagi keuntungan adalah bahwa struct memungkinkan Anda untuk menambahkan lebih banyak elemen jika perlu, tanpa harus menulis ulang banyak kode.
sumber
Anda bisa menyalin struct dan mengembalikan struct dari suatu fungsi.
Anda tidak dapat melakukannya dengan array - kecuali jika itu adalah bagian dari struct!
sumber
Anda bisa menyalinnya seperti ini.
Untuk sebuah array, Anda perlu menggunakan fungsi memcpy atau loop untuk menetapkan setiap elemen.
sumber
Anda bisa menggunakan struct untuk membuat tipe data baru seperti string . Anda dapat mendefinisikan:
atau Anda bisa membuat daftar data yang bisa Anda gunakan dengan argumen fungsi atau mengembalikannya dalam metode Anda. Struct lebih fleksibel daripada array, karena dapat mendukung beberapa operator seperti = dan Anda dapat mendefinisikan beberapa metode di dalamnya.
Semoga bermanfaat buat kamu :)
sumber
Keuntungan lain menggunakan a seperti itu
struct
adalah memberlakukan keamanan jenis di mana pun sepertistruct
itu digunakan; terutama jika Anda memiliki dua tipe yang terdiri dari array dengan ukuran yang sama yang digunakan untuk tujuan yang berbeda, tipe-tipe ini akan membantu Anda menghindari penggunaan array secara tidak sengaja.Jika Anda tidak membungkus array dalam
struct
, Anda masih dapat mendeklarasikannyatypedef
: ini memiliki beberapa kelebihan daristruct
- • jenisnya dideklarasikan sekali, • ukurannya secara otomatis benar, • maksud kode menjadi lebih jelas, • dan kode lebih mudah dikelola - tetapi Anda kehilangan ◦ keamanan jenis yang ketat, ◦ kemampuan untuk menyalin dan mengembalikan nilai jenis dan ◦ kemampuan untuk menambah anggota nanti tanpa merusak sisa kode Anda. Duatypedef
s untuk array kosong dari tipe yang diberikan hanya menghasilkan tipe yang berbeda jika ukurannya berbeda. Selain itu, jika Anda menggunakantypedef
tanpa*
dalam argumen fungsi, itu setara denganchar *
, secara drastis mengurangi keamanan tipe.Singkatnya :
sumber
Struktur dapat berisi inisialisasi array, fungsi copy dan fini meniru beberapa keuntungan dari paradigma manajemen memori OOP. Bahkan, sangat mudah untuk memperluas konsep ini untuk menulis utilitas manajemen memori generik (dengan menggunakan sizeof () struktur untuk mengetahui dengan tepat berapa banyak byte yang dikelola) untuk mengelola struktur yang ditentukan pengguna. Banyak basis kode produksi pintar yang ditulis dalam C banyak menggunakan ini dan biasanya tidak pernah menggunakan array kecuali ruang lingkupnya sangat lokal.
Bahkan untuk array yang tertanam dalam struktur, Anda bisa melakukan "hal-hal pintar" lainnya seperti memeriksa kapan saja Anda ingin mengakses array ini. Sekali lagi, kecuali ruang lingkup array sangat terbatas, itu ide yang buruk untuk menggunakannya dan menyebarkan informasi di seluruh program. Cepat atau lambat, Anda akan menemukan bug yang membuat Anda tetap terjaga di malam hari dan merusak akhir pekan Anda.
sumber
struct
mengandung .