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
Lepaskan: 2024-12-16 11:40:10
asal
108 orang telah melayarinya

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;
}
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan