|
Помогите новичку, работа с массивами |
|
|
|
Jan 17 2008, 08:56
|
Частый гость
 
Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088

|
У меня в IAR 3.42A правильно работает так: Код int k;
k = 0; while(k < 9) { sens[0][k] = 0xff; k++; }; Цитата В цикле while (выражение) инструкция
вычисляется выражение. Если его значение отлично от нуля, то выполняется инструкция, и вычисление выражения повторяется. Этот цикл продолжается до тех пор, пока выражение не станет равным нулю, после чего вычисления продолжатся с точки, расположенной сразу за инструкцией. Brian W. Kernighan, Dennis M. Ritchie The C programming Language
|
|
|
|
|
Jan 17 2008, 09:02
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(masterpc @ Jan 17 2008, 12:24)  Подскажите, что может быть:
Пишу вот так: byte k; while(k=0, k<9, k++) sens[0][k]=0xff;
Ничего в массив не пишется, По смыслу должно быть for ( k=0; k<9; k++) sens[0][k] = 0xff;
|
|
|
|
|
Jan 17 2008, 10:26
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Когда я быстро просматривал текст строчки Код byte k; while(k=0, k<9, k++) sens[0][k]=0xff; мой глаз воспринял как Код byte k; for(k=0; k<9; k++) sens[0][k]=0xff; Что у меня и вызвало удивление, в IAR такая конструкция может не работать из-за оптимизации если значения не используются потом... Судя по всему именно это и хотел сказать автор.
|
|
|
|
|
Jan 17 2008, 11:20
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(masterpc @ Jan 17 2008, 11:32)  С ";" компилятор ругается, но это уже не важно, главное, что работает , ведь самая правильная прога это та, которая работает  Судя по всему автор так и не понял, какую он ахинею написал Попробую разъяснить еще раз, хотя уже вроде бы все написано. while (k=0, k<9, k++) инструкция;Такая конструкция вполне допустима исходя из синтаксиса языка Си, но она не имеет смысла. Применение запятых в условии цикла while говорит о следующих друг за другом условиях. Компилятор будет делать следующее: 1. присвоит значение k=0 2. проверит условие k<9, оно будет истинным - true3. проверит значение k, оно будет ложным (k=0), и тело цикла не будет выполняться ни разу4. увеличит значение k++, посколько постинкремент А правильная конструкция, как уже написали: for (k=0; k<9; k++) инструкция;
|
|
|
|
|
Jan 17 2008, 11:29
|

Частый гость
 
Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788

|
Цитата(Baser @ Jan 17 2008, 13:20)  А правильная конструкция, как уже написали: for (k=0; k<9; k++) инструкция; Виноват , сам уже потом понял. Я и раньше так писал, но забыл. Спасибо!
Сообщение отредактировал masterpc - Jan 17 2008, 11:30
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|