2010-10-19 51 views
1

在C#,有(在一個語句,一個較大的一個的一部分不全部)arr[0]++;++arr[0];差[0] ++ ++和常用3 [0]

我的代碼之間的差完全理解,在C/C++/Objective-C中,這不會做同樣的事情,第一種情況會得到arr的第0個索引處的值,並將該值增加1,而第二種情況會增加arr的指針值,並且對第0個位置沒有任何影響(與arr[1]; arr++;相同)。

多虧了......,他提醒我,這在C#和C/C++/Obj-C中是一樣的。

但是,在C#中的兩個語句之間有區別嗎?

+0

與'val ++'和'++ val'相同的區別。 – leppie 2010-10-19 12:30:42

+1

好吧,我只是想確保沒有像C/C++/Obj-C那樣的差別...我是parinoid :) – 2010-10-19 12:32:24

+0

它和C/C++/etc完全一樣。同樣的區別。 – leppie 2010-10-19 12:32:54

回答

11

arr[0]++返回arr的第一個元素的值,然後增加它。

++arr[0]增量arr的第一個元素的值,然後返回它

的差異的事項,如果你想利用這個作爲一個較長的指令的一部分。例如:

arr[0] = 42; 
int x = arr[0]++; // x is now 42, arr[0] is now 43 

是不一樣的:

arr[0] = 42; 
int x = ++arr[0]; // x is now 43, arr[0] is now 43 
+1

是的,但這意味着如果它是一個單獨的聲明沒有區別,對吧? – 2010-10-19 12:31:50

+0

@Richard,看我的編輯 – 2010-10-19 12:32:35

+0

@Richard:對 – abatishchev 2010-10-19 12:33:07

1

如果是單個語句沒有區別。

+0

很快,謝謝! – 2010-10-19 12:31:02

1

++ X增量,然後同時X ++返回x的值,然後返回遞增! 但是,如果沒有人收到價值,其全部相同。

0

如果該語句本身存在,優化編譯器應該生成相同的代碼,但是當您使用內聯修改的值時,後增量可能需要複製(因此您可以使用舊值),如果該數組的類型具有昂貴的拷貝構造函數,則這可能很昂貴。