14 / 14 / 5
Регистрация: 06.04.2012
Сообщений: 287
1

Отличия между ++value и value++

12.06.2012, 18:46. Показов 2722. Ответов 12
Метки нет (Все метки)

Все используют по разному, чем эти отличия отличаются друг от друга. Или ничем ?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2012, 18:46
Ответы с готовыми решениями:

Отличия между классами String и StringBuilder
Расскажите пожалуйста про основные отличия между классами String и StringBuilder.

Отличия между классами для работы с интернетом
Добрый день, не могу понять ситуацию, как и для чего мелкософт расплодили дублирующие классы для...

Отличия между книгами Г.Шилдт - C# 3.0 Полное руководство и C# 4.0
Доброго времени суток! Какие отличия между книгами Г.Шилдт - C# 3.0 Полное руководство и C# 4.0 ?...

В чём отличия между visual studio и visual studio .net?
Товарищи, помогите пожалуйста. Недавно учил С++. Немного, азы. Сейчас приступил к C#. И вот тут...

12
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
12.06.2012, 19:01 2
C#
1
2
3
4
5
6
7
8
9
10
// ++value 
int value = 0;
value += 1;
return value;
 
// value++
int value = 0;
int temp = value;
value += 1;
return temp;
0
14 / 14 / 5
Регистрация: 06.04.2012
Сообщений: 287
12.06.2012, 19:12  [ТС] 3
alex_x_x, почти тоже самое. Разницы такой сильной и нету
0
Эксперт .NET
15276 / 11577 / 3035
Регистрация: 17.09.2011
Сообщений: 19,377
12.06.2012, 19:17 4
Adina, разница огромна.
В первом случае сначала происходит инкремент, потом используется новое значение.
Во втором случае сначала используется текущее значение, потом происходит инкремент.
0
634 / 495 / 77
Регистрация: 28.07.2010
Сообщений: 895
12.06.2012, 19:19 5
C#
1
2
3
4
5
            int value = 42;
            Console.WriteLine(value++); //will out 42
            //here value equals to 43, 'cause 42 + 1 = 43
            Console.WriteLine(++value); //will out 44
            Console.ReadKey();
постфиксный оператор ++, сначала возвращает значение, а потом его увеличивает.
префиксный наоборот - сначала увеличит, а потом вернет.
0
Эксперт С++
2309 / 1934 / 280
Регистрация: 03.05.2011
Сообщений: 4,300
Записей в блоге: 13
12.06.2012, 20:03 6
Adina, вы бы хоть книгу почитали перед тем как начинать программировать.
Герберт Шилдт - Полный справочник по C#, глава 4 - Инкремент и декремент
C#
1
2
++x; // Префиксная форма оператора инкремента
x++; // Постфиксная форма оператора инкремента
Если оператор применен в префиксной форме, то C# сначала выполнит эту
операцию, чтобы операнд получил новое значение, которое затем будет использовано
остальной частью выражения. Если же оператор применен в постфиксной форме, то C#
использует в выражении его старое значение, а затем выполнит операцию, в результате
которой операнд обретет новое значение.
Рассмотрим следующий фрагмент кода:
x = 10;
y = ++x;
В этом случае переменная y будет установлена равной 11. Но если в этом коде
префиксную форму записи заменить постфиксной, переменная y будет установлена равной 10:
x = 10;
y = x++;
В обоих случаях переменная x получит значение 11. Разница состоит лишь в том, в
какой момент она станет равной 11 (до присвоения ее значения переменной y или после).
1
14 / 14 / 5
Регистрация: 06.04.2012
Сообщений: 287
12.06.2012, 23:30  [ТС] 7
Вот к примеру, правильно ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
namespace _work_space_
{
    class State_Place
    {
        public static int _num_;
        private static int _counter_;
        private string _name_;
 
        public string _Name_
        {
            get
            {
                return _name_;
            }
            set
            {
                _name_ = value;
            }
        }
 
        public static int _Counter_
        {
            get
            {
                return _counter_;
            }
        }
 
        public State_Place()
        {
            _counter_ = ++_counter_ + _num_;
        }
    }
    class Program
    {
        static void Main()
        {
            State_Place._num_ = 109;
            State_Place sp = new State_Place();
            sp._Name_ = "Имя Фамилия";
            Console.WriteLine(State_Place._Counter_);
            Console.WriteLine(sp._Name_);
            Console.ReadKey();
        }
    }
}
Добавлено через 2 минуты
А вот так, значение остаётся таким же 109
C#
1
2
3
4
        public State_Place()
        {
            _counter_ = _counter_++ + _num_;
        }
0
Эксперт .NET
15276 / 11577 / 3035
Регистрация: 17.09.2011
Сообщений: 19,377
12.06.2012, 23:38 8
Цитата Сообщение от Adina Посмотреть сообщение
А вот так, значение остаётся таким же 109
Все правильно, 0 + 109 = 109
0
14 / 14 / 5
Регистрация: 06.04.2012
Сообщений: 287
13.06.2012, 00:03  [ТС] 9
kolorotur, А я поняла, когда делаешь counter++ - компилятор смотрит, есть ли там значение, если нету и если я не присвоила, то ставит 0. А вот так ++counter - тут 100% будет +1 да ?
0
24 / 22 / 3
Регистрация: 25.12.2011
Сообщений: 61
13.06.2012, 01:16 10
Цитата Сообщение от Adina Посмотреть сообщение
kolorotur, А я поняла, когда делаешь counter++ - компилятор смотрит, есть ли там значение, если нету и если я не присвоила, то ставит 0. А вот так ++counter - тут 100% будет +1 да ?
В обоих случаях переменная counter увеличится на единицу, но в таком случае
C#
1
y = x++;
сначала выполнится оператор = , потом инкремент (в у окажется старое значение х), а так
C#
1
y = ++x;
сначала инкремент, потом = (в у окажется новое значение х).
0
Эксперт .NET
15276 / 11577 / 3035
Регистрация: 17.09.2011
Сообщений: 19,377
13.06.2012, 01:59 11
Цитата Сообщение от Adina Посмотреть сообщение
да ?
Нет.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
State_Place._num_ = 109;
State_Place sp = new State_Place();
sp._Name_ = "Имя Фамилия";
Console.WriteLine(State_Place._Counter_);
Console.WriteLine(sp._Name_);
 
sp = new State_Place();
sp._Name_ = "Имя Фамилия";
Console.WriteLine(State_Place._Counter_);
Console.WriteLine(sp._Name_);
 
sp = new State_Place();
sp._Name_ = "Имя Фамилия";
Console.WriteLine(State_Place._Counter_);
Console.WriteLine(sp._Name_);
 
sp = new State_Place();
sp._Name_ = "Имя Фамилия";
Console.WriteLine(State_Place._Counter_);
Console.WriteLine(sp._Name_);
 
sp = new State_Place();
sp._Name_ = "Имя Фамилия";
Console.WriteLine(State_Place._Counter_);
Console.WriteLine(sp._Name_);
 
sp = new State_Place();
sp._Name_ = "Имя Фамилия";
Console.WriteLine(State_Place._Counter_);
Console.WriteLine(sp._Name_);
 
sp = new State_Place();
sp._Name_ = "Имя Фамилия";
Console.WriteLine(State_Place._Counter_);
Console.WriteLine(sp._Name_);
 
Console.ReadKey();
0
Эксперт Java
4075 / 3809 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
13.06.2012, 07:00 12
Цитата Сообщение от Adina Посмотреть сообщение
если нету и если я не присвоила
Если значения нету, то компилятор не скомпилирует такой код.
0
Эксперт .NET
15276 / 11577 / 3035
Регистрация: 17.09.2011
Сообщений: 19,377
13.06.2012, 10:30 13
Цитата Сообщение от turbanoff Посмотреть сообщение
Если значения нету, то компилятор не скомпилирует такой код.
Скомпилирует. Это же поле класса - если нет явного присваивания, то будет default.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2012, 10:30

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Отличия между видеокартами
Доброго вечера форумчане! в чем отличия от Radeon R9 280X от R9 280 (без икса) сильно ли они...

Отличия между DVD
Задали мне тут вопрос, в чем отличие между двумя этими оптическими носителями, с точки зрения...

Отличия между книгами
Добрый день! Решил прикупить себе Искусство программирования Кнута. Так вот... не могу понять в...

Отличия между CT51264BA160B и CT51264BA160BJ
Ребята покупал год назад планку Crucial 4GB DDR3 CT51264BA160B, сейчас решил докупить ещё такую же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.