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

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

Susan Sarandon
Susan Sarandonasal
2024-11-15 22:57:03521semak imbas

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)); */

}

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:
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