C言語での2次元配列の簡単な捉えた方


本記事でやりたいこと

C言語で2次元配列についての理解と作成がしたい。

2次元配列とは

↓こんなの

行があって、
列があって、

縦にも横にも値が入れられる表のこと。たぶんね。

これをC言語で作成します。

ポインタやら、malloc(マロック)やら出てきますけど、

軽く流す気持ちで大丈夫です。

matrix.c
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

int main(int argc, char *argv[])
{
    int n, i, j;
    int **matrixA, **matrixB, **matrixC;
    double st, en;

    if (argc < 2)
    {
        n = 64;
    }
    else
    {
        n = atoi(argv[1]);
    }

    matrixA = malloc(sizeof(int *) * n);
    matrixB = malloc(sizeof(int *) * n);
    matrixC = malloc(sizeof(int *) * n);

    for (i = 0; i < n; i++)
    {
        matrixA[i] = malloc(sizeof(int) * n);
        matrixB[i] = malloc(sizeof(int) * n);
        matrixC[i] = malloc(sizeof(int) * n);
    }

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            matrixA[i][j] = rand() % 10 + 1;
            matrixB[i][j] = rand() % 10 + 1;
            // printf("matrixB[%d][%d] = %d\n", i, j, matrixA[i][j]);
        }
    }

    st = omp_get_wtime();
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            matrixC[i][j] = matrixA[i][j] * matrixB[j][i];
            // printf("matrixC[%d][%d] = %d\n", i, j, matrixC[i][j]);
        }
    }
    en = omp_get_wtime();

    printf("Etime=%.6f\n", en - st);
    // printf("%d\n", n);
    // printf("argc = %d\n", argc);

    free(matrixA);
    free(matrixB);
    free(matrixC);

    return 0;
}


freeちゃんとできてないような。。。
あっているかどうかは置いておいて、
こんな感じです。

内容

とりあえず A, B, Cを定義して

matrix.c
int **matrixA, **matrixB, **matrixC;

A, B, Cの行を配列を作成(mallocによって)

matrix.c
matrixA = malloc(sizeof(int *) * n);
    matrixB = malloc(sizeof(int *) * n);
    matrixC = malloc(sizeof(int *) * n);

各配列にも配列を作って完成!!(mallocによって)

matrix.c
for (i = 0; i < n; i++)
    {
        matrixA[i] = malloc(sizeof(int) * n);
        matrixB[i] = malloc(sizeof(int) * n);
        matrixC[i] = malloc(sizeof(int) * n);
    }

こんな感じにイメージすればいいんじゃない?

実際は違うらしいんだけど。

てことで、誰かのためになればと思っています!!

お疲れ様でした。