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

标签 c pointers struct

我想在每个对象中有一个包含多个 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 打印它就不会。我该如何解决这个问题?

最佳答案

确实,类型确实不兼容。数组 platinum->array 在分配时被转换为指向其第一个元素的指针,其类型为 char(*)[3]。但是您将其分配给 char**

你想要:

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

相关:What is array decaying?

关于在结构中创建指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54833003/

相关文章:

c - C 中有没有办法让函数返回唯一的函数?

无法弄清楚我的代码有什么问题:\(Array subtraction in C)

调用结构类型的函数并返回指针不运行

c - WIN32和其他c字符串的区别

python - 使用 Python 访问内存映射文件

用递归计算零不断崩溃

c - 如何生成 24 位 RGB 值 "more gracefully"?

pointers - 范围引用而不是值

c# - Enumerator 结构的可变性

c - 下推自动机的结构问题