【问题标题】:memcpy vs pointers exchange?memcpy vs 指针交换?
【发布时间】:2013-10-16 23:00:01
【问题描述】:

交换两个数组内容的两种不同方式之间有什么区别吗? (时间消耗除外)

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 覆盖单元格:)

谢谢!

【问题讨论】:

  • memcpy 的情况下,您不是在 交换 数据 - 只是将一个数组复制到另一个数组。
  • @PaulR 抱歉描述错误,我的意思是覆盖

标签: c arrays pointers gcc


【解决方案1】:

是的,不同之处在于,如果除了您要交换的那些之外,还有对该数组的任何其他引用,它们将指向不同的数据(在 memcpy 情况下)或相同的数据(在指针交换案例)。你想做什么取决于你想要的行为。

请注意,您的 memcpy 案例只会覆盖 cells;没有进行交换。

【讨论】:

  • 哦,是的,你是对的,我之前没有注意到这一点。我只需要覆盖单元格,有没有有效的方法来代替使用 memcpy?它太昂贵了,单元格很大,里面有指针。
  • 如果这是您正在寻找的语义,那么交换指针就可以了。
猜你喜欢
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
相关资源
最近更新 更多