arrays - 如何获取 D 中数组元素的引用?

标签 arrays reference pass-by-reference d

我有这个 D 代码用于从文件读取数据:

int foo (SomeStruct[] somestruct_array)
{
  // get file_handle...
  for (uint i = 0; i < 1000; i++) {
    file_handle.readf ("%e %e %e %e %e %e\n",
            &(somestruct_array[i].pos_x), &(somestruct_array[i].pos_y),
            &(somestruct_array[i].pos_z), &(somestruct_array[i].vel_x),
            &(somestruct_array[i].vel_y), &(somestruct_array[i].vel_z));
  }
  return 0;
}

如您所见,队伍变得越来越安静,我不断重复somestruct_array[i]。这没什么大不了的,但我试图缩短它并写道:

int foo (SomeStruct[] somestruct_array)
{
  // get file_handle...
  for (uint i = 0; i < 1000; i++) {
    auto elem = somestruct_array[i];
    file_handle.readf ("%e %e %e %e %e %e\n",
            &(elem.pos_x), &(elem.pos_y),
            &(elem.pos_z), &(elem.vel_x),
            &(elem.vel_y), &(elem.vel_z));
  }
  return 0;
}

这导致所有元素成员都是nan

那么:是否可以获取对数组元素的引用?

最佳答案

问题是 elem 是数组元素的副本,因此传递给 readf 的指针是指向临时值的指针.

这里有两个选项,您可以使用指针:

for (uint i = 0; i < 1000; i++) {
    auto elem = &somestruct_array[i];
    file_handle.readf ("%e %e %e %e %e %e\n",
        &(elem.pos_x), &(elem.pos_y),
        &(elem.pos_z), &(elem.vel_x),
        &(elem.vel_y), &(elem.vel_z));
}

或者,您可以通过引用迭代数组:

foreach (ref elem; somestruct_array[0..1000]) {
    file_handle.readf ("%e %e %e %e %e %e\n",
        &(elem.pos_x), &(elem.pos_y),
        &(elem.pos_z), &(elem.vel_x),
        &(elem.vel_y), &(elem.vel_z));
}

请注意,如果数组长度为 1000 个元素,则可以直接编写:

foreach (ref elem; somestruct_array)

关于arrays - 如何获取 D 中数组元素的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14818697/

相关文章:

c - 如何连续声明结构而不将其设为数组?

c - 从不兼容的指针类型传递参数 1

裁剪图像数组

c - 通过引用传递二维数组 - 在 C 中

c# - 装箱值类型以将其发送到方法并获取结果

Javascript - 解释数组的问题

R:使用 'if' 的函数通过引用更新数据表列

c++ - 调整大小后保持对 vector 元素的引用有效

c++ - 返回引用后数据被删除

C 用链表数组模拟引用传递