Reputation: 3693
I have an array with it the first x_size*y_size
values filled, and now I need to duplicate them DATA_JUMP
times in the same array in later memory.
for(int i=1; i < DATA_JUMP; i++)
for(int k = 0; k < x_size*y_size; k++)
orig_depth[k + i*x_size*y_size] = orig_depth[k];
This works like I want it to, however this may slow down on large datasets. I wonder if there is a trick to do this with a little pointer arithmetic.
Upvotes: 2
Views: 66
Reputation: 9814
You can use
memcpy(orig_depth + i*x_size*y_size, orig_depth, x_size*y_size * sizeof *orig_depth);
instead of the inner loop. You have to be sure that i*x_size*y_size
is not 0
, because in this case the pointer would overlap.
sizeof *orig_depth
is the size of 1 element of the array, while sizeof orig_depth
is the size of the whole array.
for int orig_depth[100];
sizeof *orig_depth
is sizeof(int)
and sizeof orig_depth
is 100 * sizeof(int)
.
The advantage of sizeof *orig_depth
against sizeof(int)
is, that you can change the type without the requirement of changing every sizeof
. The best pratice name for this is: Single source of Truth https://en.wikipedia.org/wiki/Single_source_of_truth
Upvotes: 3