以下代码段:
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
int(&row)[4] = ia[1];
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么这个特定的代码是有效的.根据我目前的理解,我没有理性的解释.有人可以帮我解决这个问题吗?我的问题&row似乎在任何地方都没有引用.我唯一的解释是,这必须是有效的,因为它是初始化.
我的书中有以下解释:
.... 我们将row定义为对四个整数数组的引用
哪个阵列?我们要初始化的那个?
nos*_*nos 13
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
Run Code Online (Sandbox Code Playgroud)
是一个包含3个元素的数组,每个元素是一个4个整数的数组.
int(&row)[4] = ia[1];
Run Code Online (Sandbox Code Playgroud)
这里的int(&row)[4]部分声明了一个名为row的引用,它可以引用一个包含4个int的数组.的= ia[1]初始化以引用所述第二元件中ia阵列,这是4个整数的数组.
int ia[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
Run Code Online (Sandbox Code Playgroud)
ia是一个3个数组的数组,int每个数组4 个.
ia[0]是{ 0, 1, 2, 3 }.
ia[1]是{ 4, 5, 6, 7 }.
ia[2]是{ 8, 9, 10, 11 }.
我不太明白为什么你说我们将"即将初始化"它 - 此时,它ia已完全初始化.
int(&row)[4] = ia[1];
Run Code Online (Sandbox Code Playgroud)
螺旋规则(以标识符开头......):
row
......是......
(&row)
...参考...
(&row)[4]
...四个数组......
int(&row)[4]
... int...
= ia[1];
...初始化ia[1](因为你必须初始化一个引用,没有办法解决它).
所以row现在是一个引用ia[1],它是"四个数组int" 类型.这里的所有都是它的.