Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengisytiharkan Tatasusunan Dengan Saiz Pembolehubah dalam Standard C?

Bagaimanakah Saya Boleh Mengisytiharkan Tatasusunan Dengan Saiz Pembolehubah dalam Standard C?

Susan Sarandon
Lepaskan: 2024-11-15 22:57:03
asal
649 orang telah melayarinya

How Can I Declare an Array With a Variable Size in Standard C?

Peruntukan Tatasusunan Dinamik dalam C dengan Saiz Tatasusunan Bolehubah

Tatasusunan bersaiz pembolehubah, juga dikenali sebagai tatasusunan dinamik, menimbulkan cabaran dalam standard C . Pertimbangkan program berikut:


int siz = 0;
int n = 0;
FILE* gambar;

gambar = fopen("test.jpg", "r");
fseek(gambar, 0, SEEK_END );
saiz = ftell(gambar);

char Sbuf[siz];
fseek(gambar, 0, SEEK_SET); //Melangkah ke permulaan fail
sementara (!feof(gambar)) {

n = fread(Sbuf, sizeof(char), siz, picture);
/* ... do stuff with the buffer ... */
/* memset(Sbuf, 0, sizeof(Sbuf)); */
Salin selepas log masuk

}

Kod di atas cuba untuk memperuntukkan tatasusunan aksara dengan saiz yang ditentukan oleh saiz pembolehubah. Walau bagaimanapun, dalam standard C, saiz tatasusunan mestilah pemalar. Ini menimbulkan persoalan: bagaimana kita boleh mengisytiharkan siz dengan betul untuk membenarkan penyusunan kod?

Malangnya, tiada kaedah langsung untuk mengisytiharkan tatasusunan dengan saiz berubah dalam standard C. Walau bagaimanapun, beberapa alternatif wujud:

  • std::vector: Dalam C moden, bekas std::vector boleh digunakan sebagai fleksibel alternatif kepada tatasusunan. Ia boleh dipanjangkan dengan mudah kepada mana-mana saiz yang dikehendaki dan penggunaannya agak mudah.
  • Operator baharu: Operator baharu boleh digunakan untuk memperuntukkan memori secara dinamik pada timbunan. Untuk mencipta tatasusunan dengan saiz berubah, seseorang boleh menggunakan char* Sbuf = new char[siz]; untuk memperuntukkan tatasusunan aksara saiz pada timbunan. Walau bagaimanapun, pendekatan ini memperkenalkan kebimbangan pengurusan ingatan (cth., potensi kebocoran memori), menjadikannya kurang sesuai berbanding std::vector.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengisytiharkan Tatasusunan Dengan Saiz Pembolehubah dalam Standard C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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