繁体   English   中英

指向 C++ 中二维数组元素的指针

[英]Pointer to an element of a 2D Array in C++

我又被指针原理弄糊涂了。

我有以下两个 arrays a 和 b:

int16_t a[3][2] = {

  {30,  40},
  {31,  41},
  {32,  42}
};

int16_t b[3][2] = {

  {50,  40},
  {51,  41},
  {52,  42}
};

b 的第二列应始终等同于 a 的第二列。 因此,每当第二列上的 a 发生变化(例如,40 变为 60)时,这也应该在 b 中表示。

所以我正在寻找类似使用指针但无法使其工作的东西:

int16_t a[3][2] = {

  {30,  40},
  {31,  41},
  {32,  42}
};

int16_t b[3][2] = {

  {50,  (*a[0][1])},
  {51,  (*a[1][1])},
  {52,  (*a[2][1])}
};

我对指针原理不太熟悉。 有什么建议么?

如果你想实现这一点,b 的元素应该是指针。 在这种情况下,您可以将b的第二列的元素设置为指向它们在数组a中的对应元素。

所以你的代码可以这样写:

int *b[3][2] = {
         {new int(50), (&a[0][1])},
         {new int(51), (&a[1][1])},
         {new int(52), (&a[2][1])}
};

请注意,如果您不记得delete使用new创建的元素,这可能会导致 memory 泄漏。 这可以通过使用另一个数组来初始化b的第一列来避免。

使用此解决方案,您必须使用*运算符来查看b元素的值。 例如:

std::cout << *b[0][0] << std::endl;

一个更简单的解决方案是实现 function 以同时更新两个数组。 这可以简化处理和使用b元素的过程,但它的性能有点差,因为更新过程可能需要双倍的时间作为第一个解决方案。

您立即通过指针间接,并将指向的 integer 的副本存储在数组中。 对原件的更改对副本没有影响。 由于b数组是一个整数数组,它的元素不能指向或引用任何东西; 它们不是指针也不是引用。

如果您希望一个值反映另一个值,则需要间接。 在这种情况下,指针将是选择,因为引用不能是数组元素。 这是一个示例,其中b是指向整数的(数组)指针数组

std::int16_t b0[] = {
  50,
  51,
  52,
};


std::int16_t* b[][2] = {
  {b0 + 0,  a[0] + 1},
  {b0 + 1,  a[1] + 1},
  {b0 + 2,  a[2] + 1},
};

您也可以定义一个特殊的“变体”,如 class 或者存储 integer,或者透明地引用 integer。 但这将是很多样板文件,我不相信这值得付出努力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM