Tatasusunan Panjang Boleh Ubah dalam C Walaupun Keperluan Terikat Tatasusunan Malar
Dalam C , dinyatakan bahawa tatasusunan terikat mestilah ungkapan yang tetap. Walau bagaimanapun, dalam senario kod tertentu, nampaknya peraturan ini dilanggar tanpa menyebabkan sebarang ralat. Pertimbangkan contoh berikut:
#include <iostream> using namespace std; int main(){ int n=10; int a[n]; for (int i=0; i<n; i++) { a[i]=i+1; cout<<a[i]<<endl; } return 0; }
Seperti dalam buku teks, kod ini sepatutnya menimbulkan ralat kerana n bukan ungkapan tetap. Yang menghairankan, ia dilaksanakan dengan sempurna dalam Xcode4 di bawah Mac. Apakah yang menerangkan percanggahan yang jelas ini?
Jawapannya terletak pada ciri C99 yang dipanggil Tatasusunan Panjang Pembolehubah (VLA). Walaupun digunakan terutamanya dalam C, penyusun tertentu menyokong VLA dalam C juga. Dalam konteks ini, int a[n] ialah VLA yang memperuntukkan ruang pada tindanan serupa dengan int a[10].
Oleh itu, kod di atas menggunakan VLA dengan panjang berubah n. Ciri ini membenarkan penciptaan tatasusunan dengan saiz yang ditentukan secara dinamik, walaupun tatasusunan terikat secara teknikalnya bukan ungkapan tetap.
Atas ialah kandungan terperinci Mengapa Tatasusunan Panjang Pembolehubah Berfungsi dalam Kod C Ini Walaupun Peraturan Terikat Tatasusunan Malar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!