2013-03-06 51 views
1

我有以下行(在C):有一種方法來初始化指針在C的陣列(在同一行)

char *tmp; 

現在,我想該變量tmp被初始化爲一些在我的代碼中指針(幾行下面),然後想要初始化爲一個數組。

有沒有辦法將tmp指向堆棧上新創建的數組的指針,而不創建另一個變量?所以,相反的:

char arr[10]; 
tmp = arr; 

我想有這樣的事情:

tmp = char[10]; 

可能類似,在C?如果是的話,你能舉個例子嗎?

+0

指針不是數組。你不能讓'tmp'既是指針也是後面的數組。 – 2013-03-06 10:04:35

+0

你不是在說「指向數組的指針」。你正在談論一個字符指針 – newacct 2013-03-06 19:27:11

+0

@newacct,而不是你可以放任何其他類型的字符。這只是一個更好理解的例子。 – artaxerxe 2013-03-07 06:14:02

回答

9

你可以像這樣做,使用複合文字特點:

tmp = (char[]){'a', 'b', 'c'}; 
+1

+1用於顯示我從未聽說過或未見過的功能並回答問題。 – Dmitry 2013-03-06 10:08:14

+0

這會初始化tmp到char [3]不是嗎? – 2013-03-06 10:41:33

+1

這是所謂的複合文字,完全可移植到所有實現現代C的編譯器,即自1999年以來的C. – 2013-03-06 11:03:41

1
tmp = alloca(10); 

alloca(size)將擴大當前棧幀,以適應size多個字節,然後返回一個指向新分配的堆空間。

我不認爲這是一個標準的C函數。雖然它通常提供,但它的使用似乎普遍不受歡迎。

+1

不使用'alloca'它不便攜並且非常容易出錯。如Graham對固定大小數組的回答使用複合文字,或者如果您確實需要動態分配堆棧,則使用VLA。 – 2013-03-06 11:06:11