Определение типа 2D массива структур в C - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть следующая структура:

typedef struct Position Position;
struct Position
{
    int x; 
    int y; 
};

Я хочу определить новый тип, который является 2D-массивом структуры Position. Как я могу это сделать? а какой тип функции, которая возвращает такой массив?

Ответы [ 2 ]

5 голосов
/ 04 апреля 2020

Вы можете объявить массив struct Position как массив других примитивных типов (например, int, float, et c). Вы также можете использовать двойной указатель.

Position **p;
Position p[100][100]

В моем примере ниже используется двойной указатель для управления размером списка position.

#include <stdio.h>
#include <stdlib.h>

typedef struct 
{
    int x; 
    int y; 
}Position;

Position ** return_array(int m, int n) {
    Position **p = malloc (sizeof(Position *) * m);
    for (int i = 0; i < m; i++) {
        p[i] = malloc(sizeof(Position)*n);
        for (int j = 0; j < n; j++) {
            p[i][j].x = i;
            p[i][j].y = j;
        }
    }
    return p;
}

int main()
{
    Position **pp = return_array(4, 4);
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            printf("P[%d][%d].(x,y) = (%d, %d)\n", i, j, pp[i][j].x, pp[i][j].y);
        }
    }
    return 0;
}

Результат:

P[0][0].(x,y) = (0, 0)
P[0][1].(x,y) = (0, 1)
P[0][2].(x,y) = (0, 2)
P[0][3].(x,y) = (0, 3)
P[1][0].(x,y) = (1, 0)
P[1][1].(x,y) = (1, 1)
P[1][2].(x,y) = (1, 2)
P[1][3].(x,y) = (1, 3)
P[2][0].(x,y) = (2, 0)
P[2][1].(x,y) = (2, 1)
P[2][2].(x,y) = (2, 2)
P[2][3].(x,y) = (2, 3)
P[3][0].(x,y) = (3, 0)
P[3][1].(x,y) = (3, 1)
P[3][2].(x,y) = (3, 2)
P[3][3].(x,y) = (3, 3)
2 голосов
/ 04 апреля 2020

Я хочу определить новый тип, который является 2D-массивом структуры Position. Как я могу это сделать?

Вы можете ввести 2D-массив struct Position:

typedef struct Position
{
    int x; 
    int y; 
} Position;
typedef Position Postion2d[M][N];

, где M - количество элементов в первом измерении, а N - количество элементов во втором измерении.

Онлайн-пример :

typedef struct Position
{
    int x; 
    int y; 
} Position;

typedef Position Postion2d[4][5];

int main()
{
    Postion2d a; 
    a[0][1].x = 2;
    a[0][1].y = 5;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...