代码之家  ›  专栏  ›  技术社区  ›  Martin DeMello

C typedef用于取消对固定大小2D数组指针的引用

  •  0
  • Martin DeMello  · 技术社区  · 6 年前

    如果我有一个指向固定大小2D数组的指针,例如。

    char (*p)[4][4] = get_array();
    

    有没有办法声明一个变量 a

    a = *p;
    

    而且 A. 正确地说是一种类型 char[4][4] a[i][j] 而不是 (*p)[i][j] ?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Some programmer dude    6 年前

    如果 p 4 那么,角色 *p 必须是的数组的数组 4. 字符(类型) char [4][4] )。不幸的是,您不能真正将该类型用于其他变量(仅在定义此类数组时),甚至不能使用 typedef . 这是因为您不能分配给数组,只能复制给它们。

    幸运的是,当数组自然衰减到指向其第一个元素的指针时,数组的数组 4. 4. 人物。

    *p 相当于 char (*)[4] ,必须是 a

    char (*a)[4];
    
        2
  •  -1
  •   Community paulsm4    4 年前

    a 是类型的数组 char [4][4] .

    a = *p;

    不,不能像这样初始化数组,而且数组是不可赋值的。

    memcpy (a, *p, sizeof(a));
    

    然后你可以使用 a[i][j] .