2012-03-12 102 views
-3

我想知道int數組在c中對內存的影響。 例如我們打開字符數組char array[10]; 它不會打開10它會打開11因爲'\0' 在int數組中有相同的情況嗎? 當我們聲明int abc[10];它會打開數組是10 int size還是11像char? 謝謝...int數組在C/C++中

+5

你認爲'char array [10]'是什麼? – Saphrosit 2012-03-12 14:42:08

+0

我的意思是聲明數組,例如我們聲明char x [10];看來x [10] ='c';我閱讀郵件後非法。我是不是很喜歡? – user1030629 2012-03-12 18:56:06

回答

0

我不知道你所說的「開」一個數組的意思。如果你聲明:

char array[10]; 

你定義10位數char的數組。如果你聲明:

int array[10]; 

你定義10位數int的數組。兩者都未初始化,除非定義爲 與靜態生命週期。

附加的'\0'隻影響字符串文字和初始化 字符串。

4

你錯了,至於char array[10]。這將不聲明 11層的元件,只有10,包括陣列終止'\0'。這意味着如果你在數組中放置一個十個字符的字符串,它將會溢出。

some_type name[10]總是聲明10個元素,從未更多,更少從未的陣列。

+0

如果在數組中放入*十個字符的字符串,它會溢出。 – 2012-03-12 14:43:12

+0

@larsmans是的,謝謝。改變。 – 2012-03-12 14:44:44

1

我想聲明字符數組[10]究竟分配10個字節的空間,這是你的工作,如果你認爲合適的管理與「\ 0」的記憶。

0

例如我們開字符數組char數組[10];它不會打開10它會打開11因爲'\ 0'

錯誤。在C中,你需要照顧你的終止\0的字符串 - 編譯器不會對你有任何幫助。如果您聲明char[10],您會得到10 char s,對於int s和所有其他類型也是如此。

0

字符數組[10] 創建10個元件的陣列。我認爲你有點困惑,因爲在c中,通常你必須創建一個大小爲11的數組來存儲大小爲10的字,因爲最後需要爲'\ 0'字符添加一個額外的元素。但是你仍然必須聲明數組的大小爲11,而不是10。編譯器不會爲你做。

0

我想你大概用C初始化的char陣列++有些困惑。 char array[10]將有大小爲10,而不是11號,然而,char array[] = "1234567890";會因爲初始化知道您的字符數組需要一個換行符結束有大小11。

1

int abc[10]創建通過9.轉換類型(例如由10個整數的數組,其中下標0,char abc[10]不改變數組中的項數。

隨着陣列炭,所述NUL終止符被認爲是字符串的一部分,所以如果你提供了一個初始化符並且指定了一個大小,那麼它的大小必須至少和字符串的大小一樣大,包括NUL終止符。如果你沒有指定大小,大小將會是包括NUL終止的字符串的長度。

char a[] = "A string"; // sizeof(a)==9 

但是請注意,C是slightl Ÿ在這方面的不同 - 在C你可以指定一個初始化和大小,做包括對NUL終止空間,它仍然編譯。

char a[9] = "A string"; // allowed in either C or C++ 
char a[8] = "A string"; // allowed in C, but not C++. 
+0

我一直使用char a [8] =「一個字符串」;就像那樣,因爲我開始C.那樣,新線a [8]是'\ 0'在哪裏? – user1030629 2012-03-12 19:01:59

+0

@ user1030629:否 - 使用'char a [8]',有效的下標從[0]到[7]。你不能依賴包含任何特定值的[8]。在一個典型的情況下,它會引用內存中隨後發生的任何字節(有效部分)'a'。這可能是'\ 0',但也可能是別的。 – 2012-03-12 19:17:25

+0

我看到謝謝,但我仍然困惑,我總是使用char a [8] =「一個字符串」;它從不crahed或無法找到上放的printf等空終結...... – user1030629 2012-03-12 19:33:03