Refactoring kod lama boleh mendedahkan amalan yang boleh dipersoalkan, seperti penggunaan tatasusunan sifar panjang dalam struct. Ini menimbulkan persoalan: Mengapa mencipta tatasusunan tanpa unsur?
Pertimbangkan struct berikut:
struct someData { int nData; BYTE byData[0]; }
Susun atur sifar panjang, seperti yang dilihat dalam byData, ialah pilihan yang luar biasa. Biasanya, tatasusunan menyimpan elemen. Walau bagaimanapun, tatasusunan dengan panjang 0 boleh digunakan sebagai penunjuk. Dalam kes ini, byData berfungsi sebagai pemegang tempat untuk penimbal panjang berubah-ubah yang akan diperuntukkan secara dinamik kemudian.
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
Fungsi ini memperuntukkan memori untuk struktur someData dan penimbal dengan panjang yang ditentukan. Tatasusunan sifar panjang dalam struct membenarkan kami menganggapnya sebagai penuding, merujuk penimbal yang diperuntukkan secara dinamik.
Untuk memfaktorkan semula kod ini, pertimbangkan untuk menggunakan:
Atas ialah kandungan terperinci Mengapa Menggunakan Tatasusunan Sifar-Panjang dalam C Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!