0

怎么投回来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)

4

3 回答 3

2

在 C 中,您不能分配给 array,因此由于 c 被声明为指向 int 的指针数组的数组,因此您不能直接分配它。

但是,例如,您可以通过在 for 循环中依次分配 c[i][j] 来覆盖其所有项目。

于 2012-12-02T19:39:34.523 回答
1

c 和 a 是数组而不是指针,见上文,您可以使用指向 (2 dim) 数组的指针,例如

int a[13][12] ={ 1,2,3 };
void *b = &a;
int (*c)[13][12] = b;

以及所有没有演员表的东西

于 2012-12-02T20:57:17.710 回答
0

您不能直接分配给数组,也不能强制转换为 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

但是,ca现在是两个不同的数组。

于 2012-12-02T19:47:37.500 回答