以下代码段:
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
int(&row)[4] = ia[1];
https://msdn.microsoft.com/en-us/library/system.environment.newline(v=vs.110).aspx
我无法理解这个特定代码有效的原因。根据我目前的理解,我没有理性的解释。有人可以帮我解决这个问题吗?我的问题在于&row
,它似乎无法在任何地方引用。我唯一的解释是,这必须是有效的,因为它是初始化。
我从我的书中得到了以下解释:
.... 我们将row定义为对数组的引用 四个整体
哪个阵列?我们即将初始化的那个?
答案 0 :(得分:13)
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
是一个包含3个元素的数组,每个元素都是4个整数的数组。
int(&row)[4] = ia[1];
这里int(&row)[4]
部分声明一个名为row的引用,它可以引用一个包含4个int的数组。 = ia[1]
初始化它以引用ia
数组中的第二个元素,这是一个包含4个整数的数组。
答案 1 :(得分:6)
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
ia
是一个包含3个数组的数组,每个数组包含4个int
。
ia[0]
是{ 0, 1, 2, 3 }
。
ia[1]
是{ 4, 5, 6, 7 }
。
ia[2]
是{ 8, 9, 10, 11 }
。
我不太明白为什么你说我们要“初始化”它 - 此时,ia
已完全初始化。
int(&row)[4] = ia[1];
Spiral rule(从标识符开始......):
row
......是......
(&row)
... ...参考
(&row)[4]
...到四个数组...
int(&row)[4]
... int
...
= ia[1];
...由ia[1]
初始化(因为你有初始化引用,没有办法解决它。)
所以row
现在是ia[1]
的引用,其类型为“四个数组int
”。这就是它的全部内容。
答案 2 :(得分:0)
(& row)[4]意味着它可以引用4个元素的数组,而ia [1]是来自2d数组ia [] []的一行,包含4个元素,因此它可以正常工作。 / p>