繁体   English   中英

如何将void *转换为int [] [3]

[英]how to cast void* to int[][3]

我需要将int[][3]类型的变量传递给一个回调函数,该函数只接受void*作为参数。 我怎样才能做到这一点?

以下代码无法编译:

void myfunc(void *param) {
    int i[][3];
    i=*param;
    printf("%d\n",i[1][2]);
}

int main(int argc, char *argv[])
{
    int i[][3]={
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}};
    myfunc(i);
}

采用:

int (*i)[3] = param;

然后像以前一样使用它。 这是一个指向整数数组的指针。

详细解答:

  • main()i类型是int[3][3] ,一个数组数组。
  • 当您将其用作表达式的一部分时,它会“衰减”为指向第一个元素的指针。
  • 该阵列的第一个元素int[3][3]的类型为int[3]
  • 指向第一个元素的指针是int(*)[3]类型的数组指针,所以这就是当你输入myfunc(i)i最终的结果。
  • 因此, int(*)[3]是在函数内部使用的正确类型。
  • 如果你有int (*i)[3]; 在函数内部,然后访问i[x]将给出数组数组中的数组x
  • i[x][y]会给你数组编号x ,项目编号y 因此,语法最终与直接访问2D数组时的语法相同。

同样,您可以将函数写为void myfunc(int param[3][3]) Param会隐式地衰减到指针int(*)[3] “在行之间”,允许你在函数内部使用param[x][y] 它看起来只是数组按值传递,但它不是 - 在C中这样做是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM