怎么投回来void*
?
int *a[13][12];
void *b
int *c[13][12];
b = (void*) a;
c = (?????) b;
这
c = (int *[13][12])b;
说cast specifies array type
这
c = (int *[][])b;
说array type has incomplete element type
。
编译器是gcc (Ubuntu/Linaro 4.6.1)
怎么投回来void*
?
int *a[13][12];
void *b
int *c[13][12];
b = (void*) a;
c = (?????) b;
这
c = (int *[13][12])b;
说cast specifies array type
这
c = (int *[][])b;
说array type has incomplete element type
。
编译器是gcc (Ubuntu/Linaro 4.6.1)
在 C 中,您不能分配给 array,因此由于 c 被声明为指向 int 的指针数组的数组,因此您不能直接分配它。
但是,例如,您可以通过在 for 循环中依次分配 c[i][j] 来覆盖其所有项目。
c 和 a 是数组而不是指针,见上文,您可以使用指向 (2 dim) 数组的指针,例如
int a[13][12] ={ 1,2,3 };
void *b = &a;
int (*c)[13][12] = b;
以及所有没有演员表的东西
您不能直接分配给数组,也不能强制转换为 C 中的数组类型。但是,由于数组衰减为指针,您可以将数据从void *
指针(即:)复制memcpy
到数组并将其用作数组,例如:
#include <stdio.h>
#include <string.h>
int main() {
int a1=1, a2=2, a3=3, a4=4;
int *a[2][2] = { { &a1, &a2 }, { &a3, &a4 } };
printf("%d %d %d %d\n", *a[0][0], *a[0][1], *a[1][0], *a[1][1]);
void *b;
b = (void*) a;
int *c[2][2];
memcpy(c, b, sizeof(c));
printf("%d %d %d %d\n", *c[0][0], *c[0][1], *c[1][0], *c[1][1]);
return 0;
}
编译并运行以下程序将为您提供:
1 2 3 4
1 2 3 4
但是,c
和a
现在是两个不同的数组。