I'm trying to understand following code:

```
#include <stdio.h>

int main(void)
{
    int counter[5] = {0};
    int *i, c;
    printf("Please enter a string terminated by ENTER key:\n");
    while(i = counter, (c = getchar()) != '\n')
    {
        switch(c)
        {
          default: continue;
          case 'U'+' ': case 'U': ++ i;
          case 'O'+' ': case 'O': ++ i;
          case 'I'+' ': case 'I': ++ i;
          case 'E'+' ': case 'E': ++ i;
          case 'A'+' ': case 'A': ++*i;
        }
    }
    for(c = 0; c < 5; c++)
       printf("counter[%d] = %d\n", c, counter[c]);

    return 0;
}

```

This code caught my attention for the following reasons

* First do not understand it because the array *counter* appears
to be the amount of vowels, without having any allocation made for it.
* Second because the last case the pointer i has an asterisk.
* Third because in each case there is a 'A'+' '. Why does it add  

a space to each vowel