论有效C++的42页上,一个指针用于为阵列名称的alaC++使用的ptr作为阵列基
飞机* newBlock = ...
newBlock [I]的.next = 0;
我还没意识到这是合法的。这是C++标准的一部分吗?这是常见的做法吗?
论有效C++的42页上,一个指针用于为阵列名称的alaC++使用的ptr作为阵列基
飞机* newBlock = ...
newBlock [I]的.next = 0;
我还没意识到这是合法的。这是C++标准的一部分吗?这是常见的做法吗?
从http://www.cplusplus.com/doc/tutorial/pointers/:
在约阵列的章节,我们使用 括号([]),以便 几次,以指定的 阵列,这是我们想指一个元素的索引。 那么,这些支架符号运算符[] 也是一个解除运算符,它被称为 作为抵消运算符。他们解引用 他们跟随的变量,就像* 一样,但他们还在括号之间添加了数字 ,地址是 解除引用。例如:
a[5] = 0; // a [offset of 5] = 0
*(a+5) = 0; // pointed by (a+5) = 0
这两个表达式是等效 和有效二者如果a是一个指针,或者如果 一个是一个数组。
是的,指针可以用来动态分配对象数组。
从这个和其他问题看来,你是一个C++新手。因此,从“Effective C++”开始并不是最好的主意。虽然它是一本很棒的书,但对于那些已经熟悉这门语言的人来说,它是最有用的。你应该从一本介绍性的书或教程开始,通过它来编写代码,然后转向“Effective C++”。
我会重复答案我已经给到类似的问题C strings confusion:
这的确令人困惑。重要的 要理解和区分的是 char name []声明数组和 char *名称声明指针。两个 是不同的动物。
但是,C中的数组可以隐含地转换为指向其第一个 元素的指针 。这使您能够执行指针运算并通过数组元素迭代 (它不是 什么类型的事物元素,char或 不是)。如上所述,您可以同时使用 ,索引操作符或指针 算术来访问数组元素。 实际上,索引运算符只是一个 句法糖(表达式相同的另一个 ) 用于指针运算。
在C++标准中规定了非常相同的规则。
@Mike:没有必要粘贴在书的全名到您的所有问题 – 2010-01-30 14:48:54
如果你要问了很多的问题,在这方面的问题,您预计这里你的声望会迅速降低。这些基本问题最好通过在C++上阅读一本好的介绍性书籍(有效的C++不是介绍性的)来解答 - 您使用不好的一个是您的问题,而不是我们的问题。 – 2010-01-30 14:49:25
@尼尔:但有人正在提出这些问题,所以他实际上获得了声誉...... – 2010-01-30 14:51:01