You have
two problems here.
- First, the "=0" part of the definition of a field does not exist: it is invalid syntax in C89, C99 and C++98. That your compiler allows it without even a warning is a very dire omen indeed, because it basically means that your compiler is not a C++ compiler. It might advertise itself as such, but it ultimately isn't. And, of course, since it's not a C++ compiler, there is no way for us to guess why id does something or doesn't without reading the manual that describes the actual language of the compiler (which, again, is not C++).
However, it is very possible that the "=0" part does what it did on older, pre-standard C++ compilers. This basically removes the variable from the class: it does not exist anymore as a member. Then, the variable is made a global variable, which can be accessed as ClassName::variableName. Note that since it is global, there is a single instance of it shared by all instances of the class.
- Second, your code is actually C code. It uses C idioms and could be used without a hitch (aside from the "=0" part) on any ANSI C89 or C99 compiler. This is both good and bad news. The bad news is that you believe to be programming in C++, which you aren't (and, by extension, that you do not know what C++ is). C++ does not use the typedef struct {} name; idiom, for instance. There are possibly many other places in your code where you use similar C-isms. This, on the long term, will create problems once you start using actual C++ constructs, since these usually interact badly (that is, very verbosely and counter-intuitively) with straight-and-true C code. The good news, however, is that your C code appears to be pretty clean. If you stick to writing C as you are currently doing, then your project should be alright.
The C way of solving this is calling a function such as memset to initialize the array, or perhaps using a "zero" structure to overwrite every single element of your array.
The C++ way of solving this is creating a default constructor with an initializer list. However, obviously, this is not C++, so this approach would require severe code rewriting to be applied.
ISO is a standardization board. ISO C++ is what everyone refers to as "C++". Non-ISO C++ is an entire family of languages which advertise themselves as C++ but do not follow the "rules" of C++ that everyone is used to. For instance, Visual C++ uses a prestandard non-ISO C++ (it cannot compile certain correct C++ programs, because it does not use the same definition of a for loop), embedded devices use a lightweight version of C++ without exceptions, and certain Symbian OS versions further strip down C++ to remove its standard library and its global variables, resulting in a language that is as different from C++ as a snake is different from a plane.
ANSI is the equivalent, but for C. C89 is the 1989 standard of C, while C99 is the 1999 standard. The two languages are different (C99 is not entirely compatible with C89 and adds new features). C++0x refers to a future standard of C++, which should appear in 200x (x being unknown). It will include several additional libraries as part of its standard library.
C++ is a superset neither of C99 nor of C89, although it does share some features of C. The essential differences between C++ and C (besides the addition of several features to C++) is that the C++ library is used instead of the C library, and that several idioms have been abandoned or changed (pass-by-pointer, typedef struct, char*, etc).