typedef struct wibble wibble; void f(wibble * ptr);but this does not:
typedef struct wibble wibble; void f(wibble array);A bit of searching in the Standard reveals
18.104.22.168 Function declarators
paragraph 12 - If the function declarator is not part of a definition of that function, parameters may have incomplete types...
This suggests the  based declarator is ok. However it's not because...
22.214.171.124 Array declarators
paragraph 1 - the element type shall not be an incomplete type
Which leads you ask what is an incomplete type?
paragraph 22 - An array of unknown size is an incomplete type.
Which is interesting because it says nothing about an array of unknown type being an incomplete type. This is a shame. Particularly because of the new  array declarator syntax in c99.