2010-01-30 44 views
0

论有效C++的42页上,一个指针用于为阵列名称的alaC++使用的ptr作为阵列基

飞机* newBlock = ...

newBlock [I]的.next = 0;

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

+1

@Mike:没有必要粘贴在书的全名到您的所有问题 – 2010-01-30 14:48:54

+4

如果你要问了很多的问题,在这方面的问题,您预计这里你的声望会迅速降低。这些基本问题最好通过在C++上阅读一本好的介绍性书籍(有效的C++不是介绍性的)来解答 - 您使用不好的一个是您的问题,而不是我们的问题。 – 2010-01-30 14:49:25

+0

@尼尔:但有人正在提出这些问题,所以他实际上获得了声誉...... – 2010-01-30 14:51:01

回答

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是一个指针,或者如果 一个是一个数组。

5

是的,指针可以用来动态分配对象数组

从这个和其他问题看来,你是一个C++新手。因此,从“Effective C++”开始并不是最好的主意。虽然它是一本很棒的书,但对于那些已经熟悉这门语言的人来说,它是最有用的。你应该从一本介绍性的书或教程开始,通过它来编写代码,然后转向“Effective C++”。

2

我会重复答案我已经给到类似的问题C strings confusion

这的确令人困惑。重要的 要理解和区分的是 char name []声明数组和 char *名称声明指针。两个 是不同的动物。

但是,C中的数组可以隐含地转换为指向其第一个 元素的指针 。这使您能够执行指针运算并通过数组元素迭代 (它不是 什么类型的事物元素,char或 不是)。如上所述,您可以同时使用 ,索引操作符或指针 算术来访问数组元素。 实际上,索引运算符只是一个 句法糖(表达式相同的另一个 ) 用于指针运算。

在C++标准中规定了非常相同的规则。

而且,看看Is array name a pointer in C?