2

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.

2
  • 5
    memcpy(orig_depth + i*x_size*y_size, orig_depth, x_size*y_size * sizeof *orig_depth); instead of the inner loop. Commented Aug 4, 2017 at 8:52
  • Thank you, works like a charm - do you want to give it as an answer so I can accept it? Commented Aug 4, 2017 at 8:58

1 Answer 1

3

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

Sign up to request clarification or add additional context in comments.

2 Comments

One question what does sizeof *orig_depth means in comparison to sizeof(orig_depth) ? Coud you please elaborate
There are sizeof unary-expression and sizeof ( type-name ), read about it here: stackoverflow.com/questions/18898736/…

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.