如果我有一个指向固定大小的2D数组的指针,例如
char (*p)[4][4] = get_array();
有什么方法可以将变量a
声明为
a = *p;
并使a
的类型正确为char[4][4]
,以便我可以使用a[i][j]
而不是(*p)[i][j]
吗?
答案 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]
。