在這段代碼中:
#include <stdio.h>
int main(void)
{
int a[2][3] = {{1,2},{4,5,6}};
printf("%d\n",a[0][2]);
return 0;
}
輸出是0- 由于陣列沒有初始化,這個輸出是一些未定義行為的結果嗎?
uj5u.com熱心網友回復:
來自 C 標準(6.7.9 初始化)
19 初始化應按初始化程式串列順序進行,為特定子物件提供的每個初始化程式將覆寫同一子物件的任何先前列出的初始化程式;151)所有未顯式初始化的子物件都應隱式初始化,與具有靜態存盤持續時間的物件相同。
和
10 如果具有自動存盤持續時間的物件未顯式初始化,則其值是不確定的。如果具有靜態或執行緒存盤持續時間的物件未顯式初始化,則:
— 如果它具有算術型別,則將其初始化為(正或無符號)零;
所以實際上這個宣告
int a[2][3] = {{1,2},{4,5,6}};
相當于
int a[2][3] = {{1,2, 0},{4,5,6}};
uj5u.com熱心網友回復:
陣列已初始化。您正在定義一個二維陣列,該陣列由兩個陣列組成,每個陣列包含三個整數。對于這兩個中的第一個,您只提供兩個值,默認情況下,缺少的值初始化為零,因此您的完整陣列是 {{1, 2, 0}, {4, 5, 6}。a[0][2] 會給你那個零。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/439320.html
