Rumah > pembangunan bahagian belakang > C++ > Mengapa Menggunakan Tatasusunan Sifar-Panjang dalam C Structs?

Mengapa Menggunakan Tatasusunan Sifar-Panjang dalam C Structs?

Patricia Arquette
Lepaskan: 2024-12-12 10:52:09
asal
188 orang telah melayarinya

Why Use Zero-Length Arrays in C   Structs?

Array of Zero Length

Dalam C , adalah mungkin untuk mentakrifkan struct yang mengandungi tatasusunan sifar panjang. Ini dirujuk sebagai C-Hack dan boleh berguna dalam situasi tertentu.

Kajian Kes

Pemfaktoran semula kod baru-baru ini mendedahkan beberapa struct dengan tatasusunan panjang sifar, seperti sebagai:

struct someData
{
   int nData;
   BYTE byData[0];
}
Salin selepas log masuk

Mengapa Panjang Sifar Tatasusunan?

Biasanya, pengkompil menjana amaran untuk tatasusunan panjang sifar, tetapi dalam kes ini, amaran telah ditindas. Satu sebab yang mungkin untuk menggunakan tatasusunan panjang sifar adalah untuk membenarkan penciptaan tatasusunan dengan sebarang panjang semasa masa jalan.

Mencipta Struktur dengan Tatasusunan Panjang Sifar

Percubaan untuk mencipta struktur baharu dengan tatasusunan panjang sifar menggunakan operator "baru" akan mengakibatkan ralat. Sebaliknya, teknik berikut boleh digunakan:

struct someData* mallocSomeData(int size)
{
    struct someData*  result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE));
    if (result)
    {    result->nData = size;
    }
    return result;
}
Salin selepas log masuk

Fungsi ini memperuntukkan memori untuk objek jenis someData dan tatasusunan byDatanya dengan saiz yang ditentukan.

Pendekatan Alternatif

Dalam banyak kes, pendekatan yang lebih sesuai ialah menggunakan penunjuk atau tatasusunan panjang 1 dan bukannya susunan panjang sifar. Ini akan menghapuskan keperluan untuk peruntukan memori tersuai dan menjadikan kod lebih mudah dibaca dan diselenggara.

Kesimpulan

Tatasusunan panjang sifar boleh menjadi teknik yang berguna dalam situasi tertentu, tetapi mereka harus digunakan dengan berhati-hati. Dalam kebanyakan kes, pendekatan alternatif, seperti penunjuk atau tatasusunan panjang 1, adalah lebih sesuai dan akan menjadikan kod lebih mudah untuk difahami dan dikekalkan.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan