例如
int (*pt)[4];
int target[3][4] = {{1,3,4,6},{2,4,5,8},{3,4,6,7}};
pt = target;
*pt = target[0];为什么是“错误无效数组分配”
发布于 2019-09-29 03:40:11
int (*pt)[4]将pt声明为指向数组的指针。
C不允许分配数组;例如,您不能:
int a[4] = {1, 2, 3, 4};
int b[4];
b = a;如果要复制数组,则需要使用循环,或者可以使用memcpy
memcpy(pt, target[0], sizeof target[0]);发布于 2019-09-29 03:57:07
再加上Barmar给出的好答案,
int (*pt)[4];声明指向int 4数组的指针。
int target[3][4] = {{1,3,4,6},{2,4,5,8},{3,4,6,7}};声明一个int 4数组(其中3个在普通的2D数组中)
pt = target;在access中,target被转换为指向其第一个元素的指针。(数组/指针转换)因为它的第一个元素是一个int 4数组,所以它被转换成一个int 4数组,它与pt类型兼容。请参阅C11标准- 6.3.2.1其他操作数-值、数组和函数指示符(P3)
*pt = target[0];因为pt是一个指向int 4数组的指针,所以当您取消引用指针时,您将得到一个INT4数组-而数组不是lvalue,也不是可分配的。Id:(p1)。
https://stackoverflow.com/questions/58151924
复制相似问题