我有以下行(在C):有一種方法來初始化指針在C的陣列(在同一行)
char *tmp;
現在,我想該變量tmp
被初始化爲一些在我的代碼中指針(幾行下面),然後想要初始化爲一個數組。
有沒有辦法將tmp
指向堆棧上新創建的數組的指針,而不創建另一個變量?所以,相反的:
char arr[10];
tmp = arr;
我想有這樣的事情:
tmp = char[10];
可能類似,在C?如果是的話,你能舉個例子嗎?
我有以下行(在C):有一種方法來初始化指針在C的陣列(在同一行)
char *tmp;
現在,我想該變量tmp
被初始化爲一些在我的代碼中指針(幾行下面),然後想要初始化爲一個數組。
有沒有辦法將tmp
指向堆棧上新創建的數組的指針,而不創建另一個變量?所以,相反的:
char arr[10];
tmp = arr;
我想有這樣的事情:
tmp = char[10];
可能類似,在C?如果是的話,你能舉個例子嗎?
你可以像這樣做,使用複合文字特點:
tmp = (char[]){'a', 'b', 'c'};
+1用於顯示我從未聽說過或未見過的功能並回答問題。 – Dmitry 2013-03-06 10:08:14
這會初始化tmp到char [3]不是嗎? – 2013-03-06 10:41:33
這是所謂的複合文字,完全可移植到所有實現現代C的編譯器,即自1999年以來的C. – 2013-03-06 11:03:41
tmp = alloca(10);
alloca(size)
將擴大當前棧幀,以適應size
多個字節,然後返回一個指向新分配的堆空間。
我不認爲這是一個標準的C函數。雖然它通常提供,但它的使用似乎普遍不受歡迎。
不使用'alloca'它不便攜並且非常容易出錯。如Graham對固定大小數組的回答使用複合文字,或者如果您確實需要動態分配堆棧,則使用VLA。 – 2013-03-06 11:06:11
指針不是數組。你不能讓'tmp'既是指針也是後面的數組。 – 2013-03-06 10:04:35
你不是在說「指向數組的指針」。你正在談論一個字符指針 – newacct 2013-03-06 19:27:11
@newacct,而不是你可以放任何其他類型的字符。這只是一個更好理解的例子。 – artaxerxe 2013-03-07 06:14:02