【发布时间】:2017-09-06 22:53:44
【问题描述】:
以下是:
int ia [3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
};
-
正常分配:
auto p = ia;这是可以理解的。
数组 ia 返回指向其第一个元素的指针,该元素是 4 个元素的第一行(4 个元素的批次)。
p 有 int (*)[4]。执行 p + 1 将指向下一批 4 个元素。 -
使用范围:
for (auto row : ia) { for (auto col: row) cout << col << " "; cout << endl; }为什么 row 不是 int (*)[4],因为每个循环都像前面的示例一样返回 4 个元素的批次?
相反,它是 int *.
当我将鼠标悬停在 row 变量上时,它给了我 int *..
谢谢
【问题讨论】:
-
你是如何得出
int*的结论的?因为我无法重现这样的推论。 -
什么是
arr1? -
@StoryTeller 它被
const auto腐烂了。 -
第一个不是正常的
for循环。 正常 for 循环将是:for (int row = 0; row < 3; ++row){ for (int column = 0; column < 4; ++column) { cout << ia[row][column] << "\n";} } -
@ThomasMatthews:不,这是一个相当不错的“正常” for 循环,基本上用迭代器表示。