首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int (*p) [4]?

int (*p) [4]?
EN

Stack Overflow用户
提问于 2010-08-02 01:11:46
回答 3查看 6K关注 0票数 9

int (*p) 4;

"p“是指向4个整数数组的指针吗?不然呢??

我该如何为这个指针调用"new“呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-02 01:12:31

是指向4个整数数组的"p“指针吗?

对,是这样!

如何为这个指针调用"new“?

例如,p = new int[7][4]

票数 7
EN

Stack Overflow用户

发布于 2010-08-02 05:01:52

实际上,int (*p)[4]是一个指向四个int数组的指针。

你可以动态分配一个“指向四个int数组的指针”类型的对象,如下所示。

代码语言:javascript
复制
int (**ptr)[4] = new (int (*)[4]);

注意,没有为任何int分配空间;只有指针本身。

您可以按如下方式分配一个包含4个int的数组:

代码语言:javascript
复制
int *ptr = new int[4];

您不能做的(如果没有显式强制转换)是将一个指向动态分配的4 int数组的指针分配给int (*)[4]类型的指针。每当通过new分配数组时,即使使用类型定义函数,新表达式的类型也是指向数组的第一个元素的指针;数组的大小不会保留在new表达式的类型中。

这是因为new[]表达式可以分配数组,其中数组的大小是在运行时选择的,因此将数组大小编码为新表达式的类型并不总是可能的(甚至是可取的)。

正如所建议的,您可以动态分配一个包含4个int的数组。第一个数组的大小从类型信息中丢失,您得到的是指向四个int数组的数组(大小为1)的第一个元素的指针。

代码语言:javascript
复制
int (*p)[4] = new int[1][4];

即使它只是一个由1组成的数组(由4个整数组成的数组),您仍然需要使用delete[]来释放p

代码语言:javascript
复制
delete[] p;
票数 6
EN

Stack Overflow用户

发布于 2010-08-02 01:56:33

对于这样的问题,online CDECL evaluator是一个有用的资源:

代码语言:javascript
复制
cdecl

C gibberish ↔ English

int (*p)[4];

    declare p as pointer to array 4 of int
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3382951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档