让我们有一个静态数组:
short tell[20];
在哪里:
tell- 数组第一个元素的地址(2 字节块)。&tell- 整个数组的地址(40 字节块)。
并且有以下构造,指向一个包含 20 个 short 类型元素的数组:
short (*pas)[20] = &tell
pas 的结果数据类型是 type: short (*)[20]。实际上问题是如何创建这种类型的变量并使用 new 操作为其分配内存?
该示例取自以下书籍:Stephen Prata - The C++ Programming Language(第 6 版)。页 182.
如果你有一个像这样的数组声明
其中
T是某种类型,N是数组中元素的数量,则指向数组第一个元素的指针的类型为T *。例如在这个定义之后,指针
p指向数组的第一个元素a。要为类似于上面定义的数组的数组动态分配内存,您可以编写
这里数组元素的类型为
T,并且p如上所述指向动态分配的未命名数组的第一个元素。现在假设
T这是类型的别名short[20],例如那么前面显示的指针声明可以写成
和
如果我们再次返回原始类型
short[20],我们得到和
最后一句的意思是分配一个元素的数组(你可以根据你的任务分配一个任意数量的元素的数组),其元素又是20个元素的数组类型
short。请注意,当使用所谓的指针算法时,指针的值将更改为
sizeof( T )因此,例如,如果您将指针声明为
where
T等同于short[20],然后在应用之后,例如,对该指针的增量该指针将包含紧接在数组最后一个元素之后的地址
a。好吧,最后是一个使用这种指针的例子。
将程序输出到控制台
其实and
tell, and&tell[0], and&tell都是同一个实体,数组分配内存块的起始地址...这里我们描述了一个数组类型 20
short,并动态创建它,返回一个指向包含它的块开头的指针。我们像处理常规数组一样处理它,比如