2011-05-26 83 views
1

我正在通過其他人編寫的演示程序工作,我對他們正在使用的一些陳述感到非常困惑。我不是很熟悉C++(更多的是Obj-C),我不確定這是否是有效的代碼。舉個例子來說,以下內容:(評論是我的)關於C++數組的新手問題

int main(int argv, char** argc) 
{ 
    int perm [20]; //OK, so declare an array of ints, size = 20 
    for (int i=0; i < 20; i++) 
     perm = i; //whaaaaa??? thought you need to specify an element to assign to an array... 
} 

這就是一個例子 - 我的編譯器在‘int’的分配拋出一個「不兼容的類型爲‘INT [20]’的錯誤,但顯然其他人已經能夠編譯程序我是堅果,或者這是糟糕的代碼

這裏的另一塊我就是不明白:?

int d[20] = {0}; //OK, another int array of size 20, initialized to 0's 
for (int i = 1; i < n; i++) 
{ 
    d = d[i - 1]; //this I don't get - assign the array to one of its own elements?? 
    if (invperm[i - 1] < b) 
     d++; //this would just increment to the next element? 
} 

我懷疑的錯誤是理解的一個我的一部分,好像代碼很糟糕,其他人會評論這個事實......如果有人有一個很好的解釋ation和/或資源我可以理解這一點,我會非常感激!

謝謝!

* 編輯補充 *

針對以下問題的答案,我並複製/粘貼代碼,它看起來完好無損,我...我只能當原作者貼承擔它,它以某種方式破壞它。感謝您的回覆,我很高興我有正確的理解,並且我會嘗試聯繫作者,看看有沒有一個沒有損壞的副本在那裏!

+1

到底從哪裏你得到這個?它是直接複製和粘貼嗎? – Bart 2011-05-26 17:30:36

回答

8

所有這些例子都是錯誤的。當你從任何地方複製代碼時,看起來你丟失了[i]

我已經看到了一些類似於通過信使程序發送的代碼,它將某些文本的某些部分視爲表情,並將其替換爲不會被複製爲文本而是被刪除的圖像。

+5

'[i]'和'[/ i]'可能會被某些程序當作* italic *的標記... – sth 2011-05-26 17:33:39

+0

這很可能,但解決方案是一樣的:獲取實際文件,不要複製和粘貼文本。 – Blindy 2011-05-26 17:34:31

+0

謝謝,看起來像代碼的作者一定是複製/粘貼和[i]被視爲一個HTML標記聽起來就像發生了什麼!我會聯繫他,看看他是否有原始文件... – Jim 2011-05-26 17:39:02

3

你的理解沒問題,那代碼完全沒有意義。

d++; //this would just increment to the next element? 

它會,如果d是一個指針。但由於d是一個數組,它只是非法的。

+0

等待,是不是數組和指針基本相同? *開玩笑*! ;-) – fredoverflow 2011-05-26 19:42:49

0

這絕對是一個複製/粘貼錯誤。 在涉及Lua腳本的遊戲技術項目中,我已經屈服於複製/粘貼代碼的誘惑。如果Lua腳本失敗,則沒有任何反饋/輸出指示某些內容失敗(這非常令人沮喪)。經過幾個小時的調試後,我意識到我的腳本正在使用'聰明的引號'。

儘管這段代碼被破壞,它仍然可以教你一些關於C++的東西。

int perm [20]; 

cout << endl << perm << endl; 
cout << endl << &perm[0] << endl; 

'perm'返回數組第一個元素的內存地址。所以當你試圖在main for循環中將'i'賦值給'perm'(20次)時,你現在就會知道你正在試圖給一個內存地址賦一個整數,因此是不兼容的類型錯誤。

然而,第二部分是嚴重破碎,我不能從這方面看出很多的學習:P。

我在示例程序添加到顯示指針/陣列如何使用:

#include <iostream> 

using namespace std; 

int main() 
{ 
    int d[20] = {0}; // 20 ints, set to 0 
    int * ptr = d; // points to d[0]'s memory address 

    for(int i = 0; i < 20; i++) 
    { 
     d[i] = 0 + i; // set array values 
    } 

    for(int i = 0; i < 20; i++) 
     {  
       // iterates through d and prints each int 
     cout << endl << "d[i]: " << d[i] << endl; 
       // dereferences the ptr to get the same int 
       // then incraments the position of the pointer for next time 
     cout << endl << "*ptr++: " << *ptr++ << endl; 
    } 

    getchar(); 

    return(0); 
}