首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向char[2][2]数组的10指针数组

指向char[2][2]数组的10指针数组
EN

Stack Overflow用户
提问于 2015-05-04 21:41:00
回答 3查看 82关注 0票数 2

对于指向char字符数组的指针,我可以写:char (*p)[2][2],对于类型为pointer的10个元素的数组,我可以写为:[2][2]char* p[10]

如何将指针类型为char[2][2]的10个元素组成的数组写入

为什么这条语句有语法错误?

代码语言:javascript
复制
char (*)[2][2] p[10];
EN

回答 3

Stack Overflow用户

发布于 2015-05-04 21:49:20

您需要使用

代码语言:javascript
复制
char (*p[10])[2][2];

但是你真的应该使用typedef,因为这些decl。可以变得极其复杂:

代码语言:javascript
复制
typedef char (*ptr_arr)[2][2]; // our pointer-to-char[2][2]
ptr_arr p[10]; // now we have a clean syntax, this is an array of pointers to char[2][2]

您还可以在C++11中使用新的using,如下所示

代码语言:javascript
复制
using ptr_arr = char(*)[2][2];
ptr_arr p[10];
票数 6
EN

Stack Overflow用户

发布于 2015-05-04 21:50:08

您应该只使用typedef

代码语言:javascript
复制
typedef char array[2][2];
typedef array *ptr_to_array[10];

ptr_to_array x; // an array of 10 elements of type pointer to char[2][2]

这样,您就不会让所有未来的代码读者都感到困惑,让他们盯着代码看几分钟。

或者,使用C++11:

代码语言:javascript
复制
using ptr_to_array = std::array<
                         std::array<std::array<char, 2>, 2>*,
                         10>;
票数 5
EN

Stack Overflow用户

发布于 2015-05-04 22:07:56

如果不要求将项分配到相邻的内存中,那么一个合理的替代方案是将所有复杂类型声明的方式都放在结构中:

代码语言:javascript
复制
typedef struct
{
  char array[2][2];
} my_type;

my_type* ptr_array[10];

这样做的好处是不会在typedefs后面隐藏指针,这在某些情况下是值得怀疑的做法。特别是在混合指针和数组时,因为无论何时在表达式中使用数组,数组都会衰减为指向第一个元素的指针。

(如果项目必须相邻分配,那么您仍然可以使用此方法,但您需要使用一些非标准机制(如#pragma pack(1))来终止结构填充)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30031669

复制
相关文章

相似问题

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