c語言數組定義初始化
㈠ 在C語言中數組的初始化是如何定義的
變數可以在定義的時候初始化,數組也可以。array[5]={1,2,3,4,5};
在定義數組時,可以用放在一對大括弧中的初始化表對其進行初始化。初始化值的個數可以和數組元素個數一樣多。
如果初始化的個數多於元素個數,將產生編譯錯誤;如果少於元素個數,其餘的元素被初始化為0。
如果維數表達式為空時,那麼將用初始化值的個數來隱式地指定數組元素的個數,如下所式:nt array[]={1,2,3,4,5};
這也表明數組 array元素個數為5。main()
}
int i,array[]={1,3,5,7,9,11}; for(i=0;i<5;
printf(%d,array[i]); r(i=0;i<5;i++) p
printf(\n);
最終結果為13579
㈡ C語言數組的初始化表示方法
C語言數組的初始化表示方法有4種,分別是:
1、定義的同時進行初始化,我們同樣用數組的初始化引出結構體的初始化,我們知道數組在定義的同時進行初始化的代碼如下:
int nums[] = {1, 3, 5};
由此可推出結構體在定義的同時進行初始化的代碼如下:
struct Person p = {"lee", 23, 1.8};
2、先定義再進行初始化,這種初始化方法其實昨天的內容里已經寫過了,代碼如下:
struct Person p;
p.name = "lee";
p.age = 23;
p.height = 1.8;
我們知道數據定義好後就不能對其進行一次性初始化了,比如如下代碼是編譯不通過的。
int nums[3];
num = {1, 2, 3}
3、第三種結構體比較例外,它可以這樣做,只不過需要對其進行一下強制類型轉換,代碼如下:
struct Person p;
p = (struct Person){"xq, 8, 8.8}
4、指定將數據賦值給指定的屬性,數組中我們見過這種寫法,代碼如下:
int nums[3] = {[0] = 2, [2] = 1, [1] = 2};
我們可以為不同的索引指定值,並不需要一定要按順序來,所以數組可以,結構體是否可以呢,當然,代碼如下:
struct Person p = {.height = 1.8, .name = "lee", .age = 23};
㈢ 【C語言】初始化數組,C語言中初始化特定列表和元素!
如果沒有顯式地初始化數組變數,那麼就會採用一般規則:如果數組具有動態存儲周期,那麼數組元素的值就是沒有定義的。否則,所有的元素都會被默認地初始化為 0(如果數組元素是指針,則會被初始化為NULL)。
當在定義數組時,若要顯式地初始化數組,必須使用初始化列表(initialization list):這是用逗號分隔開的初始化器(initializer)列表,也就是將每個數組元素的初始值放在大括弧 {} 內。如下所示:
int a[4] = { 1, 2, 4, 8 };
上述定義使得數組 a 中的元素具有下面的初始值:
a[0] = 1, a[1] = 2, a[2] = 4, a[3] = 8
當初始化一個數組時,請注意下面的規則:
(1) 不能在定義長度可變數組時,進行初始化操作。
(2) 如果數組具有靜態存儲周期,那麼該數組的初始化器必須是常量表達式。如果數組具有動態存儲周期,那麼可以在初始化器中使用變數。
(3) 如果提供了初始化列表,那麼可以在數組定義中省略數組長度,數組長度由初始化器列表中最後一個數組元素的索引值決定。例如,前面例子中數組a的定義,等同於下面代碼:
int a[ ] = { 1, 2, 4, 8 }; // 有4個元素的數組
(4) 如果一個數組的定義同時包含了對數組長度指定和初始化列表,那麼長度是通過方括弧內的表達式指定的。任何元素只要在列表中沒有對應的初始化器,就會被初始化為 0(對於指針類型,則初始化為 NULL)。如果列表中所包含初始化器比數組元素更多,則多出來的初始化器直接被忽略。
(5) 最後一個初始化值後面如果還有多餘的逗號,則忽略此逗號。
根據這些規則,下面的定義都是等價的:
int a[4] = { 1, 2 }; int a[] = { 1, 2, 0, 0 }; int a[] = { 1, 2, 0, 0, }; int a[4] = { 1, 2, 0, 0, 5 };
在最後一行代碼的數組定義中,初始化器5被忽略了。當這種不匹配的情況發生時,大多數編譯器會發出警告。
數組的初始化器必須與數組元素具有相同的類型。如果數組元素類型是聯合、結構或者數組類型,那麼每個初始化器則又會是另一個初始化列表。例如:
typedef struct { unsigned long pin; char name[64]; /* ... */ } Person; Person team[6] = { { 1000, "Mary"}, { 2000, "Harry"} };
數組的其他 4 個元素會被初始化為 0,按照本例情況,為{0,""}。
可以利用字元串字面量來初始化數組 char、wchar_t、char16_t 或 char32_t。
藉助於 C99 新增的元素指示符(element designator),可以把初始化器關聯到特定的元素。當需要把特定的元素與初始化器關聯時,將其索引值放在方括弧內。換句話說,數組元素的元素修飾符一般格式如下:
[常量表達式]
索引值必須是整數常量表達式,在下面的示例中,元素指示符是 [A_SIZE/2]:
#define A_SIZE 20 int a[A_SIZE] = { 1, 2, [A_SIZE/2] = 1, 2 };
該數組在定義時把元素 a[0] 和 a[10] 初始化為 1,把元素 a[1] 和 a[11] 初始化為 2。該數組的所有其他元素都被初始化為 0。在這個例子中,沒有元素指示符的初始化器會被關聯到前一個初始化元素的下一個元素。
如果在定義數組時沒有指定其長度,那麼元素指示符的索引值可以是任何的非負整數值。因此,下面的定義會創建一個有 1001 個元素的數組。
int a[ ] = { [1000] = -1 };
所有的數組元素都具有初始值 0,但最後一個元素例外,它的初始值是 -1。