2017-09-24 122 views
1

我目前正試圖弄清楚爲什麼我的程序輸出奇怪的字符。我希望它輸出我爲數組選擇的字符,我已經在代碼中顯示了這些字符。不過,我不想使用括號表示法。我只使用指針算術符號,這讓我很困惑。指針算術符號

有誰知道如何解決這個問題?非常感謝你,我感謝所有幫助

#include <iostream> 
using namespace std; 


int main(){ 


char *arr = new char[10]; 
*arr = 'A', 'K', 'U', 'E', 'B', 'Z', 'D', 'O', 'M', 'Q'; 

// Show arr; 
for(int i = 0; i < 10; i++){ 
cout << *(arr +i) << endl; 
} 


delete[] arr; 


} 
+1

您認爲這個說法是什麼意思? 「*'arr ='A','K','U','E','B','Z','D','O','M','Q'」 – OldProgrammer

+0

因爲您分配了一個數組十個'char's,你初始化了第一個'char'值爲'Q',未能初始化剩餘的9個字符到任何東西,所以它們包含隨機垃圾,然後試圖打印1個字符q,再加上9個字符隨機垃圾。 –

+0

@SamVarshavchik第一個元素設置爲「A」。 – melpomene

回答

0

對於built-in comma operator*arr = 'A', 'K', 'U', 'E', 'B', 'Z', 'D', 'O', 'M', 'Q';將被解釋爲(*arr = 'A'), ('K'), ('U'), ...;;所以它只將數組的第一個元素分配給'A',其他元素根本沒有初始化。

如果你想初始化所有的元素,你可以

char *arr = new char[10] {'A', 'K', 'U', 'E', 'B', 'Z', 'D', 'O', 'M', 'Q'}; 

LIVE

+0

哦,謝謝,那就是我想知道怎麼做 – Dany

0

你的指針符號是罰款。問題是你的數組沒有被初始化。

*arr = 'A', 'K', 'U', 'E', 'B', 'Z', 'D', 'O', 'M', 'Q';第一受讓人'A'*arr,然後評估並扔掉'K',然後評估並扔掉'U'等不你的編譯器產生了這樣的警告?

數組的元素1到9永遠不會被賦值。