c语言变量作为数组长度,为什么在C中不允许将数组的大小作为常量变量但在C中允许?...
在C const中,并不意味著“常量”(即,在編譯時可評估).它只是意味著只讀.
例如,在一個函數中,這個:
const int r = rand();
const time_t now = time(NULL);
完全有效.
定義為const int的對象的名稱不是常量表達式.這意味著(在C??99之前的C和C的所有版本中)它不能用于定義數組的長度.
盡管C99(以及可選的C11)支持可變長度數組(VLA),但它們無法初始化.原則上,編譯器在定義VLA時不知道VLA的大小,因此無法檢查初始化程序是否有效.在您的特定情況下,編譯器很可能能夠解決它,但語言規則旨在涵蓋更一般的情況.
C幾乎相同,但C有一個C缺乏的特殊規則:如果一個對象被定義為const,并且它的初始化是一個常量表達式,那么對象的名稱本身就是一個常量表達式(至少對于整數類型) .
C沒有采用這個功能的確沒有充分的理由.在C中,如果你想要一個整數類型的名稱常量,通常的方法是使用一個宏:
#define LEN 5
...
int arr[LEN] = {1, 2, 3, 4, 5};
請注意,如果更改LEN的值,則必須重新編寫初始值設定項.
另一種方法是使用匿名枚舉:
enum { LEN = 5 };
...
int arr[LEN] = {1, 2, 3, 4, 5};
枚舉常量的名稱實際上是常量表達式.在C中,由于歷史原因,它始終是int類型;在C中它是枚舉類型.不幸的是,這個技巧僅適用于int類型的常量,因此它僅限于INT_MIN到INT_MAX范圍內的值.
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的c语言变量作为数组长度,为什么在C中不允许将数组的大小作为常量变量但在C中允许?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言程序设计科学出版色,C语言程序设计
- 下一篇: c语言指针在左还是右,C语言学习之指针的