Jawaban:
Ini memungkinkan Anda untuk melewatkan array ke suatu fungsi dengan nilai, atau mendapatkannya kembali dengan nilai dari suatu fungsi.
Struct dapat diteruskan oleh nilai, tidak seperti array yang membusuk ke pointer dalam konteks ini.
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 dengan
typedef char ABC[MAX];
tetapi 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 tipe ABC
) atau Anda akan tersengat oleh fakta bahwa itu ABC
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.
Anda bisa menyalin struct dan mengembalikan struct dari suatu fungsi.
Anda tidak dapat melakukannya dengan array - kecuali jika itu adalah bagian dari struct!
Anda bisa menyalinnya seperti ini.
struct ABC a, b;
........
a = b;
Untuk sebuah array, Anda perlu menggunakan fungsi memcpy atau loop untuk menetapkan setiap elemen.
Anda bisa menggunakan struct untuk membuat tipe data baru seperti string . Anda dapat mendefinisikan:
struct String {
char Char[MAX];
};
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 :)
Keuntungan lain menggunakan a seperti itu struct
adalah memberlakukan keamanan jenis di mana pun seperti struct
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 mendeklarasikannya typedef
: ini memiliki beberapa kelebihan dari struct
- • 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. Dua typedef
s untuk array kosong dari tipe yang diberikan hanya menghasilkan tipe yang berbeda jika ukurannya berbeda. Selain itu, jika Anda menggunakan typedef
tanpa *
dalam argumen fungsi, itu setara dengan char *
, secara drastis mengurangi keamanan tipe.
Singkatnya :
typedef struct A_s_s { char m[113]; } A_s_t; // Full type safey, assignable
typedef char A_c_t[113]; // Partial type-safety, not assignable
A_s_t v_s(void); // Allowed
A_c_t v_c(void); // Forbidden
void s__v(A_s_t); // Type-safe, pass by value
void sP_v(A_s_t *); // Type-safe
void c__v(A_c_t); // UNSAFE, just means char * (GRRR!)
void cP_v(A_c_t *); // SEMI-safe, accepts any array of 113
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.
struct
mengandung .