Копирование вектора в матрицу

Нужно вектор v(размером n * n) скопировать в матрицу(n*n, то есть квадратную) и вывести на экран. Сделать это нужо с помощью указателей. Я не понимаю КАК сделать это копирование( Думал просто перебором присваивать значения или прсто сделать mat = &v и циклом вывести, но не вышло. Вот что есть на данный момент:

void vec_to_mat(int *v, int *mat, int n){
int i = 0, j = 0;
int *pv;
*pv = &v[0];
for(j; j < n; j++){
    for(i; i < n; i++){
        *mat[i][j] = pv[i + 1];
    }
}
for(j; j < n; j++){
    for(i; i < n; i++){
printf("%d", mat[i][j]);
printf("\n");
    }
}

}


Ответы (1 шт):

Автор решения: Harry

Так устроит?

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

void fill(const int * v, int ** mat, int N)
{
    int r = 0, c = 0;
    for(int i = 0; i < N*N; ++i)
    {
        *(*(mat+r)+c++) = *(v+i);
        if (c == N) { c = 0; ++r; }
    }
}

int main()
{
    const int N = 5;
    int ** mat = malloc(sizeof(int*)*N);
    for(int i = 0; i < N; ++i)
        *(mat+i) = malloc(sizeof(int)*N);

    int * v = malloc(sizeof(int)*N*N);
    for(int i = 0; i < N*N; ++i)
        *(v+i) = rand()%100;

    for(int i = 0; i < N*N; ++i)
        printf("%2d ",*(v+i));
    puts("\n");

    fill(v,mat,N);
    for(int i = 0; i < N; ++i)
    {
        for(int j = 0; j < N; ++j)
            printf("%2d ",*(*(mat + i)+j));
        puts("");
    }
}
→ Ссылка