【发布时间】:2018-07-22 18:12:30
【问题描述】:
当我们使用数组时,它会自动转换为指向它的指针 第一个元素。 (C++ 入门第 5 版。pp129)
int ia[3][4];
for (auto p = ia; p!= ia + 3; ++pp){
for (auto q = *p; q ! = *p + 4; ++q)
cout << *q << ' ';
cout << endl;
}
上面的代码 sn-p 就是引用的一个很好的例子。 p是一个指针指向一个由四个整数组成的数组,q是一个指针指向一个整数
然而,基于范围的循环有不同的故事
for (auto row: ia) // the code won't compile in fact
for (auto col: row)
这里,row 的类型是指针指向 int(因为第二个循环不会编译)。这是为什么?这不是 use 数组的情况吗?
【问题讨论】:
-
已经使用
std::array或std::vector了。 -
imho pp.129 不是应该在名为“c++ 入门”的书中讨论原始数组的地方,可能在附录 XVI 中:P
-
@MichaelNastenko -- 指针指向具有类型的对象。该类型可以是“四个 int 的数组”。这正是示例代码中的
p。ia是 3 个 4 个整数的数组;它的名称衰减为指向其第一个元素的指针,这是 3 个 4 个整数数组中的第一个,即 4 个整数数组。 -
@MichaelNastenko -- 完全正确是真的。
ia[0]的类型是四个int的数组。在许多情况下,名称衰减为指向其第一个元素的指针,但这是如何使用的结果;这不会影响其类型。这种衰减发生在很多情况下,程序员往往会忘记它的存在,但如果你忽视它,你迟早会被咬伤。要查看差异,请编写一个简单的程序,显示sizeof(ia[0]和sizeof(int)。