2010-10-19 3 views
1

В C# есть разница между кодом (все в одном заявлении, не является частью более крупной один) arr[0]++; и ++arr[0];разница между обр [0] ++ и ++ обр [0]

I полностью понять, что в C/C++/Objective-C это не будет делать то же самое, первый случай получит значение в 0-ом индексе arr и увеличивает его значение на единицу, а второе - увеличивает значение указателя arr , и ничего не делает для его 0-й позиции (так же, как arr[1]; arr++;).

Благодаря sth, он напомнил мне, что это то же самое в C# и C/C++/Obj-C.

Однако существует ли разница между двумя утверждениями в C#?

+0

та же разница, что и 'val ++' и '++ val'. – leppie

+1

Хорошо, я просто хотел убедиться, что не было какой-то разницы, как в C/C++/Obj-C ... Я parinoid :) –

+0

Это точно так же, как C/C++/etc , Та же разница. – leppie

ответ

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

Да, но это означает, что нет никакой разницы, если это единое утверждение, верно? –

+0

@ Рихард, см. Мое редактирование –

+0

@ Рихард: Правый – abatishchev

1

Если есть одно заявление нет разницы.

+0

Это было быстро, спасибо! –

1

++ х с шагом, а затем возвращается в то время как х ++ возвращает значение х, а затем получает приращение! Но если некому получить значение, его все равно.

0

Оптимизирующий компилятор должен генерировать один и тот же код, если этот оператор существует сам по себе, но когда вы используете значение, которое вы изменяете в строке, post-increment может потребовать создания копии (чтобы вы могли работать со старым значением), что может быть дорогостоящим, если массив имеет тип, который имеет дорогой конструктор копирования.

Смежные вопросы