将别名应用于数组

3

我有一个对象,它有一个数组属性,比如说(*obj).some_array;,其中some_array是一个整数数组。

我知道我们可以简单地创建别名,例如:

int test = 10;
int &alias = test;

然而,我该如何给一个对象的数组起别名,类似于上面的示例,但是针对 obj 的 some_array?
2个回答

7
如果obj->some_arrayint[LEN]类型,你可以直接这样做:
int (&alias)[LEN] = obj->some_array;

为了理解这个奇怪的语法,您可以使用顺时针/螺旋规则,这是一种读取您不熟悉的声明的方法(在此处查看)。

int &alias[LEN](与int &(alias[LEN])相同)将是一个包含LEN个对int的引用的数组。
int (&alias)[LEN]则是一个指向包含LEN个int的数组的引用。


请注意,在C++中,你所称呼的“别名”被称为“引用”!

1
C语言的声明语法不是由顺时针/螺旋规则驱动的。复杂的声明符从简单的声明符逻辑一致地构建而成。顺时针/螺旋规则是一种辅助记忆方法,有些人(不包括我!)用它来帮助解释复杂的声明。其基本原理是要有一个声明语法,以反映使用情况。这对于在多维数组中正确获取数组边界特别有帮助。你的回答让人觉得这种语法是为了利用任意规则而设计的。 - CB Bailey
是的,虽然这一开始可能看起来违反直觉,但我认为它有助于显示语法背后的某些逻辑。仅供参考,这里是我上次解释“声明跟随使用”的地方。或者在这里。 - CB Bailey

0
假设 some_array 是一个整数数组:
int *alias = obj.some_array;

就像@Oli Charlesworth所说的那样。此外,您的“alias”指向的东西与“obj.some_array”不是相同类型,因为“obj.some_array”是一个“int [LEN]”,而“*alias”是一个“int”。 - peoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接