在结构体中创建指向数组的指针

3
我想要在一个结构体中有多个3x3的数组,并创建一个通用指针来指向该对象中的任何一个数组。这是我做的,但它一直告诉我指针类型不兼容。我该如何修复我的array_ptr
typedef struct my_struct{

    char array[3][3];

} object;

object* init_obj(){

    object* platinum = (object*)malloc(sizeof(object));

    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            platinum->array[i][j] = 'w';
    return platinum;
}

int main(){

    object* platinum = init_obj();

    char **array_ptr = platinum->array;

    printf("%c\n", array_ptr[0][0]);

    return 0;
}

具体的警告如下:
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
  char **array_ptr = platinum->array;

当程序运行时,会发生段错误,但如果直接从platinum->array打印,则不会出现此问题。我该如何修复呢?

1个回答

2

这些类型确实是不兼容的。当进行赋值操作时,数组platinum->array会被转换为指向其第一个元素的指针,其类型为char(*)[3]。但你正在将它赋给char**

你需要:

char (*array_ptr)[3] = platinum->array;

相关内容:什么是数组衰减?

最初的回答:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接