Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Операторы инкремента и декремента
Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Прохожу в книге тему "операторы инкремента и декремента" и ни хрена не могу понять.
Мне понятно, что инкремент – это увеличение (от слова increase), а декремент – это уменьшение (от слова decrease). Но вот дальше…
Вот тут http://php.su/learnphp/operators/?id пишется, что существуют префиксные и постфиксные инкременты и декременты.
Префиксный инкремент (++$a) увеличивает $a на единицу и возвращает значение $a.
Постфиксный инкремент ($a++) возвращает значение $a, а затем увеличивает $a на единицу.
Префиксный декремент (--$a) уменьшает $a на единицу и возвращает значение $a.
Постфиксный декремент ($a--) возвращает значение $a, а затем уменьшает $a на единицу.
Первое, что не понятно, - в чём разница между префиксным и постфиксным:
- сначала увеличением $a на единицу, а затем возвращением значение $a;
и
- сначала возвращением значения $a, а затем увеличения $a на единицу ?
Это выглядит просто как перемена мест слагаемых. Результат то не меняется.
Увеличение на единицу – это понятно. Непонятно куда возвращается значение $a ? Чем, оператором ?
Почему a=11, а b=10 ? Ведь $а изначально равна 10 ($a=10;).
Затем используется постфиксный инкремент ($a++), который возвращает значение $a (опять таки, непонятно кому и зачем ?), а затем увеличивает $a на единицу. Т.е. получается, что постфиксный инкремент в данном случае возвращает переменной "а" ($a) её же значение – "10", а затем увеличивает это значение на единицу. Далее значение "11" оператором присваивания присваивается переменной "b" ($b). Получается, что значение переменной "b" будет равно "11". Но в приведённом выше примере всё наоборот.
Я не понимаю логику этих операторов. Кто-нибудь может доступно объяснить ?
$i=15; // Присвоить $i целое число 15
$a=$i--; // СНАЧАЛА присвоить $a значение $i, а ЗАТЕМ уменьшить $a
$b=++$i; //СНАЧАЛА увеличить $i, а ЗАТЕМ присвоить увеличенное значение $i переменной $b
Вопрос следующий.
Учитывая, что и инкремент с декрементом, и оператор присваивания имеют правостороннюю ассоциативность, то почему в строке ($a=$i--;) сначала выполняется оператор присваивания, а потом постфиксный декремент ?
Ведь правосторонняя ассоциативность означает, что последовательность выполнения операторов будет происходить справа налево, т.е. получается, что сначала должен выполниться постфиксный декремент, а потом оператор присваивания.
Кроме того. Прописал я этот код:
$i=15;
print $i."<br>";
$a=$i--;
print $a."<p>";
По идее на экран должно вывести число 15, а под ним число 14, поскольку переменной $a присвоилось значение переменной $i (т.е. число 15), а затем это значение уменьшилось на единицу. Но у меня выводятся два числа 15 (одно под другим). Почему значение $a не уменьшается на единицу ?
LIME
Отправлено: 18 Августа, 2011 - 00:06:13
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Oleh пишет:
Т.е. получается, что постфиксный инкремент в данном случае возвращает переменной "а" ($a) её же значение – "10", а затем увеличивает это значение на единицу. Далее значение "11" оператором присваивания присваивается переменной "b" ($b). Получается, что значение переменной "b" будет равно "11".
присваивает значение только 1 раз....тоесть присваивает 10 потом увеличивает и все...на этом все действия закончены....при последующих обращениях к $a будет возвращено уже 11
Oleh
Отправлено: 18 Августа, 2011 - 01:38:09
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
LIME пишет:
присваивает значение только 1 раз....тоесть присваивает 10 потом увеличивает и все...на этом все действия закончены....при последующих обращениях к $a будет возвращено уже 11
Это всё ты говоришь о переменной $a ?
$a=10; // это присвоение значения 10 переменной
$a++; // это увеличение значения переменной $a на единицу
А почему переменная $b равняется 10, если "$a++" - это уже 11 и эти 11 присваиваются переменной $b ?
$b=$a++;
LIME
Отправлено: 18 Августа, 2011 - 01:45:27
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Oleh пишет:
сначала возвращением значения $a, а затем увеличения $a на единицу ?
что непонятного? (Добавление)
бросай это дело
программировать это не твое (Добавление)
сначала присваивается а потом увеличивается при постинкременте
и после увеличения уже не присваивается
русским по белому написано!!! (Добавление)
попробую как ребенку объяснить )))
есть 2 коробочки
1 пустая в другой карандаши
смотрим сколько карандашей в второй коробочке и кладем в первую столько же
потом в вторую кладем еще 1 карандаш
Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
LIME пишет:
что непонятного?
(Добавление)
бросай это дело
программировать это не твое
(Добавление)
сначала присваивается а потом увеличивается при постинкременте
и после увеличения уже не присваивается
русским по белому написано!!!
Ты объяснять нормально научись !
Сначала прочитай мой вопрос полностью, а уже потом пытайся что-то промычать.
Я в своём вопросе всё чётко изложил, что мне непонятно. А ты отвечаешь какими-то обрывками, ещё больше людей путаешь.
Чего ты вообще на этот форум зашёл и эфир тут засоряешь ? Советовать всем, кто не понимает твои "объяснения", что программирование - это не их дело ? Так мы и без тебя, такого "грамотея" разберёмся, что нам делать.
Не умеешь объяснять - не объясняй ! Тебя лично никто об этом не просил.
LIME
Отправлено: 18 Августа, 2011 - 02:10:47
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
я выше добавил специально для недалеких хамов объяснение ))
Мелкий
Отправлено: 18 Августа, 2011 - 09:13:04
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Oleh пишет:
Увеличение на единицу – это понятно. Непонятно куда возвращается значение $a ? Чем, оператором ?
----- Всё гениальное - просто
И ещё проще, если ты - индиго
Oleh
Отправлено: 18 Августа, 2011 - 14:42:51
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
LIME пишет:
Oleh пишет:
сначала возвращением значения $a, а затем увеличения $a на единицу ?
что непонятного? (Добавление)
бросай это дело
программировать это не твое (Добавление)
сначала присваивается а потом увеличивается при постинкременте
и после увеличения уже не присваивается
русским по белому написано!!! (Добавление)
попробую как ребенку объяснить )))
есть 2 коробочки
1 пустая в другой карандаши
смотрим сколько карандашей в второй коробочке и кладем в первую столько же
потом в вторую кладем еще 1 карандаш
Слушай, я здесь эте тему создал не для того чтобы с тобой перегавкиваться или реагировать на твои бессмысленные комменты. Мне реально непонятно зачем ты "мусоришь" в темах, создаваемых новичками. Может у тебя психолгическая проблема и ты пытаешься её решить своими советами типа "бросай программирование, т.к. я считаю, что это не твоё".
Вообще, если ты заметил, то я в созданной теме не спрашивал твого мнения, чем мне заниматься в жизни. Я с этим и сам разберусь.
Я задал конкретные вопросы в расчёте на то, что мне кто-нибудь напишет вразумительные ответы.
Я сам юрист, около полугода ходил к репетитору на программирование, т.к. учебники не мог самостоятельно осилить. Было много незнакомой терминологии, ну и вообще материал незнакомый. Два месяца проходил с репетитором HTML, следующие два месяца - JavaScript, следующие два месяца - PHP. Нужно ещё учитывать, что я не знал основ, без знания которых открывать учебники про HTML, JavaScript или PHP не было никаого смысла. Сейчас я сам более-менее могу разбираться в учебниках, но есть темы которые я не могу понять не потому, что я тупой, а потому, что в большинстве учебников материал изложен автором в стиле "для себя". Такое впечатление, что авторы книг не ставили цель изложить материал в своём учебнике таким образом, чтобы он был понятен людям, ранее не имевшим дело с программированием.
Вот и твои комменты по моей теме написаны в таком же стиле. Более того, твои ответы вообще не по теме. Я тебе уже сказал, прочитай полностью мою тему. Там конкретные вопросы, на которые можно дать нормальный ответ, а не писать про какие-то карандаши.
Единственное, чего ты добился, так это моей просьбы админу забанить тебя в теме "Вопросы новичков", т.к. непонятно зачем ты здесь свои посты оставляешь.
White
Отправлено: 18 Августа, 2011 - 14:52:04
Частый посетитель
Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011 Откуда: Днепропетровск
Помог: 28 раз(а)
Oleh если вы юрист, то лучше остальных знаете о свободе слова. тем более что никакой ненормативной лексики в отношении вас использовано не было. а то, что вы не хотите воспринимать действительность, а лишь воспринимаете желаемое за действительное +
Oleh пишет:
Я сам юрист, около полугода ходил к репетитору на программирование, т.к. учебники не мог самостоятельно осилить
наталкивает на мысль, какой из вас юрист.
Oleh пишет:
в большинстве учебников материал изложен автором в стиле "для себя".
возможно проблемма не в учебниках, а в том что у вас недостаточно терпения чтобы их читать.
----- if(time()>1356048000) die();
EuGen
Отправлено: 18 Августа, 2011 - 14:54:09
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Мир, труд, май.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.