Создать указатель на массив в структуре - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу иметь структуру с несколькими массивами 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 Ответ

0 голосов
/ 22 февраля 2019

Типы действительно несовместимы.При присвоении массив platinum->array преобразуется в указатель на свой первый элемент, а его тип - char(*)[3].Но вы присваиваете его char**.

Вы хотите:

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

Связанный: Что такое распадающийся массив?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...