在Effective C ++的第42页,指针用作数组名称ala
AirPlane * newBlock = ...
newBlock [I]的.next = 0;
我没有意识到这是合法的。这是c ++标准的一部分吗?这是常见做法吗?
答案 0 :(得分:5)
是的,指针可用于动态分配对象数组。
从这个问题和其他问题来看,你似乎是C ++的新手。因此,从“Effective C ++”开始并不是最好的主意。虽然它是一本很棒的书,但它对于那些已经熟悉该语言的人来说非常有用。您应该从介绍性的书籍或教程开始,完成它,编写一些代码,然后转向“Effective C ++”。
答案 1 :(得分:2)
来自http://www.cplusplus.com/doc/tutorial/pointers/:
在我们使用的关于数组的章节中 括号([])按顺序多次 指定元素的索引 我们想要引用的数组。 那么,这些括号标志运算符[] 也是一个已知的解除引用运算符 作为抵消运营商。他们取消引用 他们遵循的变量就像* 是的,但他们也添加了数字 括号之间的地址是 解引用。例如:
a[5] = 0; // a [offset of 5] = 0
*(a+5) = 0; // pointed by (a+5) = 0
这两个表达式是等价的 如果a是指针或if,则有效 a是一个数组。
答案 2 :(得分:2)
我会重复回答我给出的类似问题C strings confusion:
确实令人困惑。重要的 要理解和区分的是 char name []声明数组和 char * name声明指针。他们俩 是不同的动物。
但是,C中的数组可以隐含 转换为指向其第一个的指针 元件。这使你有能力 执行指针算法并迭代 通过数组元素(它没有 什么类型的元素,char或 不)。正如@which提到的,你可以使用 索引操作符或指针 用于访问数组元素的算术。 实际上,索引操作符只是一个 语法糖(另一种 表达同一表达式) 用于指针算术。
C ++标准中规定了相同的规则。