[英]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.