|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.01.2012, 00:42 | #1 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
Интересная проблема с указателями
пхп 5.2, 5.3
PHP код:
0 - aaa 1 - bbb 2 - ccc 3 - ddd 4 - ddd --------------- 0 - aaa 1 - bbb 2 - ccc 3 - ddd 4 - ddd --------------- aaa bbb ccc ddd ddd первый цикл если вырезать, то дальнейшие циклы уже правильно выводят данные. PHP код:
0 - aaa 1 - bbb 2 - ccc 3 - ddd 4 - eee --------------- aaa bbb ccc ddd eee или же если переменную удалить, то вывод даже первым циклом будет как ожидаем PHP код:
1 - bbb 2 - ccc 3 - ddd 4 - eee Кто-нибудь растолкуйте что происходит? Последний раз редактировалось iankov; 15.01.2012 в 00:47. |
15.01.2012, 01:09 | #2 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Смею предположить, что тип переменно $row сохраняется и когда следующий foreach выполняется, то при назначении $row элемент массива, то идет именно присвоение указателя на элемент.(Хотя немного до конца не врубаюсь)
Ситуацию удалось промоделировать обычным for PHP код:
Мы меняем указатель последнего элемента на все остальные по очереди, и по сути на предпоследней операции указатель указывает на предпоследний элемент, а на последней итерации, он просто сам себе и присваивается($i = $i), т.е. также указывает на предпоследний элемент. PHP код:
Последний раз редактировалось Kostia; 15.01.2012 в 01:17. |
15.01.2012, 01:29 | #3 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
for($i = 0; $i < count($data); $i++){
$row = $data[$i]; echo $row.'<br />'; } что-то не понял. $row - это указатель, он в первой итерации указывает на первый элемент массива. во второй на второй. в четвертой указатель = $data[3]. А почему же в пятой, последнее указатель = указатель? должен же указатель показывать на $data[4] ? там же четко написано в цикле $row = $data[$i]. при $i = 4 $row = $data[4] ? |
15.01.2012, 01:43 | #4 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Оу, я наврал, дело не в указателях(ссылках), а в присвоении значений. Мы не указатели присваиваем последней ячейке, а значения предыдущих ячеек по очереди, поэтому предыдущее значение последней ячей каждый раз перезаписывается.
Чёт жестко тупанул=))) уже 4:40, пора спать, в понедельник очередной экзамен)) |
15.01.2012, 02:00 | #5 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
Вот теперь понял, спасибо. Еще раз растолкую подробнее, может еще кому интересно будет)
PHP код:
PHP код:
по этому в предпоследней итерации получается $data[4] = $data[3]; и в последней итерации уже получается $row = $data[4], а $data[4] в свою очередь была переопределена на каждом этапе цикла, а в последний раз получила значение предпоследнего элемента. Так вроде должно быть всем ясно ) P.s. у меня было 23.40 Так что спать еще рано ) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
проблема с указателями | mihailvolk | Общие вопросы C/C++ | 3 | 07.05.2011 13:40 |
проблема с указателями | raspberry | Помощь студентам | 2 | 20.04.2010 23:04 |
Проблема с указателями | 3D Hunter | Общие вопросы Delphi | 8 | 14.03.2009 06:55 |
Проблема с указателями | novicer | Общие вопросы Delphi | 5 | 17.06.2007 00:21 |