Why can't I simply initialize to zeroes a C multidimensional array as one would normally initialize a one dimensional array:
int arr[3]= {0}; / *yep.*/
int multArr[3][2] = {{0}}; /* nicht! */
Why can't I simply initialize to zeroes a C multidimensional array as one would normally initialize a one dimensional array:
int arr[3]= {0}; / *yep.*/
int multArr[3][2] = {{0}}; /* nicht! */
Technically this is the correct way:
int multArr[3][2] = { {0, 0}, {0, 0}, {0, 0} };
Doing as incertia suggests works too, but technically this is what happens:
1. The first value will be set to 0.
2. The values the are lacking will be set to 0.
Meaning that if you would initialise like this:
int multArr[3][2] = { 1 };
You would set the first value to 1, and the values that are lacking will be set to 0.
int multArr[3][2] = { {0, 0}, {0, 0}, {0, 0} };
Yes. Aregee has it correct. On the other hand, you can allways use memset?
memset(multArr, 0, sizeof(multArr));
There is absolutely nothing wrong with the original code; it is fully standard compliant and likely compiles on all compilers. It even compiles on the C compiler I wrote, and I wasn’t really aiming to be fully featured in some areas.
Use
int multArr[3][2] = {0};
This compiles but it in terms of correctness, “int multArr[3][2] = {{0}};” is better.
Technically this is the correct way:
int multArr[3][2] = { {0, 0}, {0, 0}, {0, 0} };
The original poster is likely looking for a way that does not require him or her to rewrite the whole initializer should the array dimensions change.
“int multArr[3][2] = {{0}};” is the best way to accomplish this goal.
Can anyone explain what the problem was with the original code? It works for me...
The original poster has misunderstood the error output of his or her compiler or his or her compiler is extremely broken.
It works in Visual Studio (all versions), GCC (all versions), and whatever they use on codepad.com.
http://codepad.org/opwFC94e (for those who do not know it compiles and runs the code, and compile errors are listed, if any (see this version: http://codepad.org/eusvaaHZ))
L. Spiro
The original poster has misunderstood the error output of his or her compile
You must be kidding me.
I know that one dimensional arrays initialize to 0 once at least one value is set, but I thought N dimensional array initialization had some quirks, like many things in C++.
Meaning that if you would initialise like this:
int multArr[3][2] = { 1 };
You would set the first value to 1, and the values that are lacking will be set to 0.
Correct. Just try it and ye shall see. Though the OP explicitly asks why he can't...
simply initialize to zeroes a C multidimensional array as one would normally initialize a one dimensional array:
int arr[3]= {0}; / *yep.*/ int multArr[3][2] = {{0}}; /* nicht! */
Not sure what is not working for him as he has not mentioned what error he gets or how it is not working.