Rumah >pembangunan bahagian belakang >C++ >Mengapa Tatasusunan Panjang Pembolehubah Berfungsi dalam Kod C Ini Walaupun Peraturan Terikat Tatasusunan Malar?

Mengapa Tatasusunan Panjang Pembolehubah Berfungsi dalam Kod C Ini Walaupun Peraturan Terikat Tatasusunan Malar?

DDD
DDDasal
2024-12-16 11:40:10109semak imbas

Why Do Variable-Length Arrays Work in This C   Code Despite the Constant Array Bound Rule?

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!

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