Rumah > pembangunan bahagian belakang > C++ > Mengapa Kod C Ini Disusun Walaupun Susunan Tidak Tetap Terikat?

Mengapa Kod C Ini Disusun Walaupun Susunan Tidak Tetap Terikat?

Barbara Streisand
Lepaskan: 2025-01-05 10:29:40
asal
347 orang telah melayarinya

Why Does This C   Code Compile Despite a Non-Constant Array Bound?

C Tatasusunan Terikat sebagai Ungkapan Malar: Pengecualian dalam Kod

Dalam C , tatasusunan terikat lazimnya mestilah ungkapan tetap, memastikan bahawa saiz tatasusunan diketahui semasa penyusunan. Walau bagaimanapun, dalam kes tertentu, peraturan ini nampaknya dilanggar. Mari kita terokai contoh khusus:

#include <iostream>
using namespace std;

int main() {
    int n = 10;
    int a[n];  // Array a with size n

    for (int i = 0; i < n; i++) {
        a[i] = i + 1;
        cout << a[i] << endl;
    }

    return 0;
}
Salin selepas log masuk

Kod ini, apabila disusun menggunakan Xcode4 pada Mac, dilaksanakan tanpa sebarang ralat. Walaupun hakikat bahawa saiz tatasusunan a bukanlah ungkapan tetap, kod itu berfungsi.

Penjelasan: Tatasusunan Panjang Pembolehubah (VLA)

Sebab ini kod berfungsi adalah disebabkan oleh ciri yang dipanggil Variable-Length Arrays (VLA), yang diperkenalkan pada C99. VLA membenarkan saiz tatasusunan ditentukan semasa masa jalan, tidak seperti tatasusunan biasa yang saiznya mesti diketahui pada masa penyusunan.

Dalam kod yang disediakan, n bukan ungkapan tetap tetapi pembolehubah. Walau bagaimanapun, oleh kerana pengkompil dalam Xcode4 menyokong VLA, ia dapat memperuntukkan memori untuk tatasusunan a semasa masa jalan berdasarkan nilai n.

Peruntukan Tindanan lwn. Peruntukan Timbunan

Adalah penting untuk ambil perhatian bahawa VLA diperuntukkan pada tindanan, serupa dengan tatasusunan statik. Ini bermakna bahawa memori untuk tatasusunan diperuntukkan dan dibebaskan secara automatik apabila atur cara masuk dan keluar dari fungsi di mana VLA diisytiharkan. Tingkah laku ini berbeza daripada tatasusunan biasa yang diperuntukkan pada timbunan dan mesti diurus secara manual menggunakan penunjuk.

Atas ialah kandungan terperinci Mengapa Kod C Ini Disusun Walaupun Susunan Tidak Tetap Terikat?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan