2017-08-04 16 views
2

我有一個數組,它的第一個x_size*y_size值填充,現在我需要在以後的內存中在同一個數組中複製它們DATA_JUMP次。從數組本身的數組中創建一個數組的內部值在C

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]; 

這可以像我想要的那樣工作,但是這可能會減慢大型數據集的速度。我想知道是否有一個小竅門算法來做到這一點。

+5

'memcpy(orig_depth + i * x_size * y_size,orig_depth,x_size * y_size * sizeof * orig_depth);'而不是內部循環。 – mch

+0

謝謝你,像魅力一樣工作 - 你想給它一個答案,所以我可以接受它嗎? – Kev1n91

回答

3

您可以使用

memcpy(orig_depth + i*x_size*y_size, orig_depth, x_size*y_size * sizeof *orig_depth); 

代替內環。您必須確定i*x_size*y_size不是0,因爲在這種情況下指針會重疊。

sizeof *orig_depth是數組的1個元素的大小,而sizeof orig_depth是整個數組的大小。
對於int orig_depth[100];sizeof *orig_depthsizeof(int)sizeof orig_depth100 * sizeof(int)

sizeof *orig_depthsizeof(int)的優點是,您可以更改類型,而無需每隔sizeof更改一次。最好的實踐名稱是:單一真相源https://en.wikipedia.org/wiki/Single_source_of_truth

+1

一個問題sizeof * orig_depth與sizeof(orig_depth)相比意味着什麼?請詳細說明 – Kev1n91

+1

有'sizeof unary-expression'和'sizeof(type-name)',請在這裏閱讀:https://stackoverflow.com/questions/18898736/what-does-sizeof-without-do –

相關問題