【问题标题】:c++ use of ptr as array basec ++使用ptr作为数组基础
【发布时间】:2010-01-30 14:46:32
【问题描述】:

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

AirPlane *newBlock = ...

newBlock[i].next=0;

我不知道这是合法的。这是 c++ 标准的一部分吗?这是常见的做法吗?

【问题讨论】:

  • @Mike:没有必要把书的全名粘贴到你所有问题的主题中
  • 如果你要问很多这样的问题,你可以预期你的声誉会迅速下降。这些基本问题最好通过阅读一本关于 C++ 的好介绍性书籍(有效的 C++ 不是介绍性的)来回答 - 事实上,您使用的不好是您的问题,而不是我们的问题。
  • @Neil:但有人支持这些问题,所以他实际上获得了声誉......
  • 一本好书可以在这里找到:stackoverflow.com/questions/388242/…
  • @gf:好的,我会尝试另一本参考书,看看它对我有什么帮助。

标签: c++ arrays pointers


【解决方案1】:

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

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

【讨论】:

    【解决方案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 是指针或者如果 a 是一个数组。

    【讨论】:

      【解决方案3】:

      我会重复我对类似问题C strings confusion的回答:

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

      但是,C 中的数组可以隐式 转换为指向其第一个的指针 元素。这使您能够 执行指针运算并迭代 通过数组元素(它不 什么类型的物质元素,字符或 不是)。正如@which 提到的,您可以使用 两者,索引运算符或指针 访问数组元素的算法。 实际上,索引运算符只是一个 语法糖(另一种 表示相同的表达式) 用于指针运算。

      C++ 标准中规定了完全相同的规则。

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

      【讨论】:

        猜你喜欢
        • 2016-12-23
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        相关资源
        最近更新 更多