我试图掌握多维数组中指针的概念,有些事情我想澄清一下。让我们举一个小的二维数组B作为例子:
int B[4][3];
int i; //ranges from 0-3
我的问题是以下元素是什么类型:
B+i
*(B+i)
让我感到困惑的是,当我跑步时:
std::cout<<B;
std::cout<<*B;
输出相同。 如果有人能澄清这一点,我会很高兴。
答案 0 :(得分:3)
B
衰败到int (*)[3]
。此处的规则是删除最左边的范围,然后添加*
。
因此,B+i
也是int (*)[3]
。
因此,*(B+i)
为int [3]
(衰减为int *
)。
B == *B
并不难解释。 B
是第一个子数组的地址(也称为B[0]
的地址),*B
是该子数组的第一个元素的地址(也称为B[0][0]
的地址)。< / p>
类型说明:
C / C ++中的所有多维数组实际上都是嵌套的1D数组。
您的int B[4][3];
可被视为T B[4]
,其中T
为int [3]
。
然后衰变发生在普通1D阵列上:T B[4]
变为T (*)
。由于T
为int [3]
,T (*)
为int (*)[3]
。