I get foreach macro from here
#define foreach(item, array) \
    for(int keep = 1, \
            count = 0,\
            size = sizeof (array) / sizeof *(array); \
        keep && count != size; \
        keep = !keep, count++) \
      for(item = (array) + count; keep; keep = !keep)
I don't understand "(array) + count", it's equal "&array[count]", but why not use "array[count]" instead of "(array) + count"
 
     
     
     
    