這個問題在這里已經有了答案: C 中 int 陣列的初始值 (10 個答案) 未初始化的陣列如何影響結果?(沒有除錯) (5個答案) 11 小時前關閉。
我正在撰寫代碼來了解陣列,我注意到如果陣列宣告為
a[5];
它將垃圾值存盤為它的元素
a[5] = {};
正在存盤 0 作為所有元素。
有人可以解釋發生了什么以及這些值是如何存盤的嗎?
我想知道這是否是靜態資料型別,但似乎不是
#include<stdio.h>
void increment();
int main()
{
increment();
increment();
increment();
}
void increment()
{
int a[5]={};
static int b[5]={1,2,3,4,5};
int i;
for(i=0;i<=4;i )
{
a[i] ;
b[i] ;
}
printf("%d %d\n",a[1],b[1]);
}
uj5u.com熱心網友回復:
具有自動存盤持續時間的變數(在沒有存盤類說明符的塊范圍內宣告static)如果未明確初始化則保持未初始化狀態。
本宣告
int a[5] = {};
在 C 中無效。您不能指定一個空的花括號串列。你必須寫例如
int a[5] = { 0 };
或者
int a[5] = { [0] = 0 };
在這種情況下,第一個元素顯式初始化為零,所有其他元素隱式初始化為零。
編譯器可以有自己的語言擴展,允許使用一些在 C 標準中無效的結構。
如果陣列具有靜態存盤持續時間(在檔案范圍內宣告或具有存盤類說明符static),如果未顯式初始化,則它會被隱式初始化(??對于算術型別,它是零初始化的)。
具有靜態存盤持續時間的陣列在函式呼叫之間保留它們的值。
函式內increment
void increment()
{
int a[5]={ 0 };
static int b[5]={1,2,3,4,5};
/...
a每次函式獲得控制權時,都會初始化具有自動存盤持續時間的陣列。
靜態存盤時長的陣列b在程式啟動前只初始化一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534158.html
標籤:数组C初始化存储期限
