2013-10-26 14 views
0

我正在研究一個結構化編程作業,要求我編寫一個程序,允許用戶輸入名稱等等等等。將名稱放入字符串數組後,我想要將其打印到屏幕上。我曾希望通過將其中包含的數組和名稱的數量傳遞給一個函數,然後將它們打印到屏幕上來實現此目的。我想將數組和名稱作爲常量傳遞,以便它們能夠保護它們,以便它們不能被該函數修改,只能讀取。我不明白爲什麼我不能把const放在字符串數組或者名字數之前。如何在C++中將一個字符串數組作爲常量傳遞給一個函數?

void writeNames (const string namelist[], const int number_of_names) 

這是我不得不接受的東西還是有一種方法,我可以將這兩個函數作爲只讀函數傳遞給它?我可以在沒有這個的情況下完成作業,所以這更像是一個「幫我做作業」的好奇問題。

P.S.向量似乎是一種用字符串等方式做更多事情的方式,但是我們還沒有在課堂上接觸到它們,因此我也無法使用它們。

感謝

+1

爲什麼不能在數組之前使用'const'? – 0x499602D2

+1

當你包含「const」時你會得到什麼錯誤? –

+0

爲什麼你不允許使用課堂上沒有討論過的東西?這似乎愚蠢。 – nhgrif

回答

0

沒有看到你在函數中做什麼,這是很難回答的問題,但我的水晶球說,你可能做的事情可能修改你的方法中的參數之一,所以編譯器抱怨是因爲你聲明瞭參數const。

舉個例子,像這樣工作得很好:

void writeNames(const std::string namelist[], const int number_of_names) 
{ 
    for(int i = 0; i < number_of_names; i++) { 
     std::cout << namelist[i] << std::endl; 
    } 
} 

然而,這樣的事情會導致編譯器錯誤,因爲你改變的變量之一:

void writeNames(const std::string namelist[], const int number_of_names) 
{ 
    while(number_of_names--) { // <-- We're modifying a const value here 
     std::cout << namelist[count] << std::endl; 
    } 
} 

順便說一句,把const修飾符放在你的「number_of_names」參數上有點多餘,因爲你是通過值來傳遞參數的,所以改變函數中的值不會影響調用函數中輸入參數的值。然而,數組中任何字符串的改變都會反映在調用函數中,所以const修飾符是有意義的。通常,你只會使用const作爲指針的參數,或者通過引用傳遞參數。

相關問題