C typedef用于解引用固定大小的2D数组的指针

时间:2019-01-10 19:19:01

标签: c arrays

如果我有一个指向固定大小的2D数组的指针,例如

char (*p)[4][4] = get_array();

有什么方法可以将变量a声明为

a = *p;

并使a的类型正确为char[4][4],以便我可以使用a[i][j]而不是(*p)[i][j]吗?

2 个答案:

答案 0 :(得分:2)

如果p是指向4个字符的数组的指针,则*p必须是4个字符的数组(类型{{1} }。不幸的是,您不能真正将该类型用于其他变量(仅在定义此类数组时),甚至不能使用char [4][4]。那是因为您不能分配给数组,只能复制到它们。

幸运的是,随着数组自然衰减到指向其第一个元素的指针,因此typedef个字符数组的数组将随后衰减到一个指向4个字符数组的指针。

也就是说,表达式4等效于*p,其类型必须是char (*)[4]

a

答案 1 :(得分:-1)

a是类型char [4][4]的数组。

  

有什么方法可以将变量a声明为

     

a = *p;

不,您不能像这样初始化数组,并且数组不可分配。

相反,您应该这样做:

memcpy (a, *p, sizeof(a));

,然后您可以使用a[i][j]