I have a 2d and i want to set the elements to zero without looping all the elements
int a[100][200];
I can't initialize them at point of declaration.
I have a 2d and i want to set the elements to zero without looping all the elements
int a[100][200];
I can't initialize them at point of declaration.
What exactly does "I can't initialize them at point of declaration" mean? "Don't know how to"? Or "can't modify the code there"?
The C++ language has a feature that initializes the entire array to 0 at the point of declaration
(note, no explicit
0
is really necessary between the{}
). Can you use it or not?If you can't, then your options are: use the
memset
-hack, 1D-reinterpretation-hack or set each element explicitly by iterating through the array(s) (with or without the help fostd::fill
).Many answers used pointer arithmetic with
fill
. This can be done simpler:Basically,
a[N]
is a first memory address after the multi-dimensional array, no matter how many dimensions there are. This works too:The asterisks here dereferences the pointers down to
int*
type (the array brackets dereferencesint****
toint***
, the two asterisks does the rest of the job).For C++, you can use the std:fill method from the algorithm header.
So, in your case, you could use this:
Of course, the 0 could be changed for any int value.
Try
memset(a,0,sizeof(a));
This simply overwrites the memory used by the array with 0 bytes. Don't do this for user-defined data types unless you really know what you do. There's also
std::fill
andstd::fill_n
, which is more C++ish (but not the easiest way here).Try
If you initialize some (but not all) of the elements, the rest will be initialized to zero. Here, you are only explicitly initializing the first element of the first sub-array and the compiler is taking care of the rest.
C++ allows multidimensional arrays to be iterated entirely through by a base-element pointer. So you can use
std::fill
and pass it the very first nonarray elementIn C this is formally not allowed, and you would need to iterate through each sub-array separately, because iterating beyond the first subarray's past-the-end pointer causes undefined behavior in C. Nontheless, in practice this still works.