Назначение инкрементной переменной - PullRequest
0 голосов
/ 30 мая 2018
PORTB = pattern ++;
//The author explains te upper code with the code below
pattern = pattern + 1;
PORTB = pattern;

PORTB = ++ pattern; //That's what I think is right

Я думаю, что этот код неправильный, так как постинкремент должен добавить 1, после использования его в выражении, поэтому для кода ниже должен быть предварительный инкремент e.Но так как я не очень хорошо знаком с c / c ++ (прочитал только одну книгу), я хотел знать, что я что-то напутал или автор просто неправ.

Редактировать: Книга не оc / c ++, речь идет об Arduino.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Префикс формы [--,++]a выполнить действие (увеличение или уменьшение), а затем использовать результат

Например:

  int a[] = {0,1,2};
  int i = -1;
  std::cout<< a[++i] << ' ';
  std::cout<< a[++i] << ' ';
  std::cout<< a[++i] << std::endl;

Эквивалентная форма

 int a[] = {0,1,2}; 
 int i = -1;
 for(int j =0; j < 3; j = j + 1) {
  i = i + 1; // action first
  std::cout<< a[i] << ' ';
 }
 std::cout<< std::endl; 

Форма постфикса a[++,--] использовать значение как есть, затем увеличить или уменьшить переменную

Например:

  int a[] = {0,1,2};
  int i = 0;
  std::cout<< a[i++] << ' ';
  std::cout<< a[i++] << ' ';
  std::cout<< a[i] << std::endl;

Эквивалентная форма

 int a[] = {0,1,2}; 
 int i = 0;
 for(int j =0; j < 3; j = j + 1) {
  std::cout<< a[i] << ' ';
  i = i + 1; // action after
 }
 std::cout<< std::endl; 
0 голосов
/ 30 мая 2018

вы правы

PORTB = pattern++;

эквивалентно

PORTB = pattern;
pattern = pattern + 1;
...