value = *data_ptr++;
Это присваивает результат разыменования data_ptr
к value
, а затем увеличивает data_ptr
. Таким образом, первый элемент массива, который равен 0, будет находиться в value
, а data_ptr
будет указывать на второй. Это связано с тем, что ++
имеет более высокий приоритет, так что он применяется к data_ptr
, а не к *data_ptr
.
value = *++data_ptr;
Это первое приращение data_ptr
(так что указывает на третий элемент массива вместо второй, в данном случае), и затем сохраняет результат разыменовании, что (то есть, третий элемент массива, который также равен 0) в value
.
value = ++*data_ptr;
Это сохраняет результат разыменования data_ptr
(третий элемент массива) + 1 (так, 1 в целом, так как все элементы вашего массива автоматически инициализируются 0 в этом случае) в value
.
http://web.ics.purdue.edu/~cs240/misc/operators.html – kfsone