对于指向char字符数组的指针,我可以写:char (*p)[2][2],对于类型为pointer的10个元素的数组,我可以写为:[2][2]:char* p[10]。
如何将指针类型为char[2][2]的10个元素组成的数组写入
为什么这条语句有语法错误?
char (*)[2][2] p[10];发布于 2015-05-04 21:49:20
您需要使用
char (*p[10])[2][2];但是你真的应该使用typedef,因为这些decl。可以变得极其复杂:
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,如下所示
using ptr_arr = char(*)[2][2];
ptr_arr p[10];发布于 2015-05-04 21:50:08
您应该只使用typedef
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:
using ptr_to_array = std::array<
std::array<std::array<char, 2>, 2>*,
10>;发布于 2015-05-04 22:07:56
如果不要求将项分配到相邻的内存中,那么一个合理的替代方案是将所有复杂类型声明的方式都放在结构中:
typedef struct
{
char array[2][2];
} my_type;
my_type* ptr_array[10];这样做的好处是不会在typedefs后面隐藏指针,这在某些情况下是值得怀疑的做法。特别是在混合指针和数组时,因为无论何时在表达式中使用数组,数组都会衰减为指向第一个元素的指针。
(如果项目必须相邻分配,那么您仍然可以使用此方法,但您需要使用一些非标准机制(如#pragma pack(1))来终止结构填充)
https://stackoverflow.com/questions/30031669
复制相似问题