\why can't I initialize a multidimensional C array with zeroes

Started by
18 comments, last by Pink Horror 10 years ago

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! */
Intel Core 2 Quad CPU Q6600, 2.4 GHz. 3GB RAM. ATI Radeon HD 3400.
Advertisement
Do you have a compiler error, or something?
Use

int multArr[3][2] = {0};
what

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));
Can anyone explain what the problem was with the original code? It works for me...

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

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

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++.

Intel Core 2 Quad CPU Q6600, 2.4 GHz. 3GB RAM. ATI Radeon HD 3400.

Can you post the error output you're getting?

"I would try to find halo source code by bungie best fps engine ever created, u see why call of duty loses speed due to its detail." -- GettingNifty


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.

This topic is closed to new replies.

Advertisement