c ++使用ptr作为数组基础

时间:2010-01-30 14:46:32

标签: c++ arrays pointers

在Effective C ++的第42页,指针用作数组名称ala

AirPlane * newBlock = ...

newBlock [I]的.next = 0;

我没有意识到这是合法的。这是c ++标准的一部分吗?这是常见做法吗?

3 个答案:

答案 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 ++标准中规定了相同的规则。

另外,请查看Is array name a pointer in C?