2013-10-16 42 views
0

交換兩個數組內容的不同方式有什麼不同嗎? (除時間消耗)memcpy vs指針交換?

memcpy(cells,tmp_cells,sizeof(t_speed)*params.ny*params.nx); 


t_speed* temp_ptr = *cells_add; 
*cells_add = *tmp_cells_add; 
*tmp_cells_add = temp_ptr; 

其中

t_speed* cells = *cells_add; 
t_speed* tmp_cells = *tmp_cells_add; 

是否有指針交換任何潛在的威脅?

編輯:我想要做的唯一的事情就是覆蓋細胞tmp_cells :)

謝謝!

+0

對於'memcpy',你不是*交換*數據 - 只是將一個數組複製到另一個數組。 –

+0

@PaulR對於錯誤的描述感到抱歉,我的意思是覆蓋 – dorafmon

回答

3

是的,不同之處在於,如果除了要交換的數據之外還有其他任何對此數組的引用,它們將指向不同的數據(在memcpy的情況下)或指向相同的數據指針交換的情況下)。你想要做什麼取決於你想要的行爲。

請注意,您的memcpy僅覆蓋cells;沒有交換。

+0

哦,你是對的,我沒有注意到這一點。我只需要覆蓋單元格,是否有任何有效的方式來做到這一點,而不是使用memcpy?它的成本太高,單元很大,內部有指針。 – dorafmon

+1

如果這是你正在尋找的語義,交換指針是沒問題的。 –