Nawaz Sk Ответов: 1

Создание 2d массива с использованием структуры


Итак, я только что запустил структуру и был заинтересован в ее реализации, чтобы создать матрицу смежности для использования в реализации алгоритма, связанного с графом, поэтому я создаю указатель на переменную указателя в графе, чтобы использовать ее в качестве базового адреса для 2d-матрицы, но при попытке назначить память массиву показывает мне ошибку: преобразование в нескалярный тип запрошено может ли кто-нибудь помочь мне? я публикую весь код следующим образом:-

Что я уже пробовал:

struct graph{
    int v;
    int e;
    struct graph **admat;
};
void main()
{
    int x,i,y,z=1,n;
    struct graph *G=(struct graph **)malloc(sizeof(struct graph));
    printf("\nenter number of vertices: ");
    scanf("%d",&G->v);
    printf("\nenter number of edges: ");
    scanf("%d",&G->e);
    G->admat=(struct graph **)malloc(G->v * sizeof(struct graph *));
    for(i=0;i<G->v;i++)
    {
        G[i]=(struct graph)malloc(G->v * sizeof(int));//here is the main error
    }
    for(x=0;x<i;x++)
    {
        for(y=0;y<i;y++)
        {
            G[x][y]=z++;
        }
    }
    for(x=0;x<i;x++)
    {
        for(y=0;y<i;y++)
        {
            printf(" %d ",G[x][y]);
        }
        printf("\n");
    }
}

CPallini

Почему вы написали:
график структура *г=(графа структуры **) [...]
?

Nawaz Sk

это указатель указателя на?

CPallini

В то время как G объявлен как одиночный указатель, в правой части выражения у вас есть двойной указатель.

Arthur V. Ratz

Я полностью согласен с CPallini

1 Ответов

Рейтинг:
0

KarstenK

Ваша проблема начинается раньше, выделяя G. G-это Ваш массив указателей, поэтому вам нужно количество массивов. Это указатель на массив указателей. Этот руководство приносит некоторое озарение. Ваша Г это что время ПТР.

struct graph *G=(struct graph **)malloc(sizeof(struct *graph) * count);
G[i]=(struct graph)malloc(sizeof(struct graph));//allocate a struct

Еще одно возможное решение, когда у вас есть фиксированный размер структур:
const int COUNT = 100; // must be a constant
struct graph G[COUNT];
//then you can access the struct
G[i][x] = 0;

Указатель на указатели-это запутанная проблема. Вы должны понимать, что все в C находится в некоторой памяти. И программа интерпретирует эту память к некоторым значениям. Эта статья хорошая Руководство для начинающих по указателям.