Kev1n91
Kev1n91

Reputation: 3693

Create a copy of the values inside of an array from the array itself in C

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

Answers (1)

mch
mch

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

Related Questions