2014-02-20 55 views
2

正如我在標題我很困惑如何聲明char數組寫的,並從搜索結果是char [] c和char c []有什麼區別?

1. char[] c

2. char c[]

第二個是類似於因爲我在大學學到了。如果第一個是合法的,我可以做一些像char[5] c

+2

當您嘗試'char [5] c'時會發生什麼? –

+0

我現在不能嘗試,現在我正在講課,而不是在實驗室。 – logger

+0

因爲我正在學習編程的基礎知識,講師正在談論數組。我在4年前學過C++。現在我所搜索的內容都與c#有關。 – logger

回答

2

方面:

char[] c 

這是一個普通的字段或局部聲明,聲明cchar[]型。

char c[] 

這在任何情況下都是不合法的。

如果第一個是合法的,我可以做點像char[5] c

通常情況下,你會做這樣的事情:

char[] c = new char[5]; 

或相同:

var c = new char[5]; 

char[5] c語法你引用無效。有語法fixed char c[5] - 但這不是陣列 - 這是一個固定緩衝(其中c現在是一個不安全char*指針保留塊中的unsafe struct足夠5個char值,所以10字節大)。

+0

非常感謝答案,我誤解了有關C++和C#的問題。 – logger

0

char[] c是錯誤的。如果您在visual studio中嘗試使用char[5] c,將會出現如下錯誤:

空的屬性塊是不允許的。

我認爲只有char c[]是正確的。

0

在C(++)世界:

這取決於你的編譯器是如何寬容很多。在某些情況下,[]只不過是一種更有意義的寫作方式*。 C風格的數組不是「真正的」數組,它們只是指向一組隱含類型數據的第一個元素的指針。

隨着代碼所示的移位到更意圖,之間的差異(對於許多人來說,甚至可能是大多數編譯器,其是無效的),並char c[]炸燬多一點的簡單char *cchar []c。也就是說,這不是技術限制 - 它仍然只是一個指針,您可以使用c[5]char *cchar c[]相同的方式。

稍微不同的變體是一個靜態長度的數組,例如。 char c[5]。這與簡單的char *c有更大的區別。它仍然只是一個指針,但不會手動分配它。它有其優點和侷限性。

在任何情況下,即使它在編譯器(它可能在C++ .NET中)在語法上是正確的,在C/C++中也是不好的,因爲它意味着「數組性「的變量是在」類型「中,這實際上並不正確。

通常的例子是這樣的;在C#:

char[] a, b; 

聲明兩個字符數組,ab。然而,在C中:

char* a, b; 

聲明一個字符指針和一個字符變量。

這就是說,我可以相信它是C++。NET/C++/CLI中的有效和正確的方法。如果它遵循.NET標準,那很可能。

一個巨大的免責聲明:不要混淆不同的C語言風格。他們往往是非常不同的。特別是C#是非常不同的,很多語法都改變了,相同的關鍵字可能意味着完全不同的東西。 C++建立在C之上(所以C代碼主要用於C++),對於例如C++也是如此。 Objective-C的。 C#完全站在這個環境之外。這不是一個延伸,它只是受到一些風格(例如大括號)的啓發,但卻非常不同。最後,它可能更接近於(Object)Pascal,而不是C(++),儘管它在視覺上看起來更接近於C.

相關問題