2014-12-06 141 views
0

爲什麼,當我宣佈爲字符串,我需要用一個二維數組「*」在C中聲明二維數組的字符串與整數?

char *month[12][10] = {"January", "February", "March", "April", 
"May", "June", "July", "August", 
"September", "October", "November", 
"December"}; 

,但是當我宣佈它整數,有沒有必要?

int numbers[2][3]={1,2,3,4,5,6}; 
+0

順便提一下,'month'可以這樣寫:'char * month [] = {「January」,「February」,「March」,「April」,「May」,「June」, 「July 「,」August「,」September「,」October「,」November「,」December「};' – poige 2014-12-07 00:41:37

回答

1

原因在C「字符串」 被表示通過指針處理到其第一個字符代替

或者以另一種方式告訴它 - C語言中沒有字符串類型,只有指向字符的指針。 通過慣例很多庫將字符串初始化爲「字符串」開始的指針,以0x00字節結尾或接受「字符串」長度作爲參數,但沒有字符串類型。

當我聲明它爲整數,沒有必要?

原因整數由它們自己表示,而不是由它們的第一個字節地址表示。當您使用「引號標記的東西」,它有效地讓你的指針,它的第一個字符和一個指向字符在C.

記爲char *ptr當你看到:

char *str = "some string";

這意味着變量str獲取字符s的地址。並且變量str被聲明爲指向字符,因此它是char *。這只是一些圖書館的慣例,使用首字母字符處理字符串開頭。

+0

爲什麼整數數組不需要它?不是所有數組指針指向它們的第一個元素嗎?另外我的教科書在他們聲明2d字符串數組時不使用*,它是否過時? – OneCode 2014-12-06 06:05:59

+0

原因整數由它們自己表示,而不是由它們的第一個字節地址表示。當你使用「用引號表示的東西」時,它會給你的指針指向它的第一個字符,並且在C中將指向字符的指針標記爲'char * ptr'。 – poige 2014-12-06 06:09:01