int**型のポインタ変数を用いればmalloc関数を2度用いることにより2次元配列的にメモリを確保することができます

ソーラー「🌞どう?🌞



int** a;


a = (int**)malloc(sizeof(int*)*2);


を実行して動的にメモリを確保したとき


確保したメモリの先頭のアドレスが


int**型のポインタ変数aに格納されることになります


int**型のポインタ変数aには


        💖アドレスが代入されるので💖


aに[]演算子を用いた


a[0]

a[1]


データを代入することができるようになります


そのデータとはアドレスであり


生成される

a[0]

a[1]

int*型のポインタ変数なのです


a[0]

a[1]

int*型のポインタ変数なので



さらに


a[0] = (int*)malloc(sizeof(int)*3);

a[1] = (int*)malloc(sizeof(int)*3);


を実行して


int*型のポインタ変数


a[0]

a[1]

を用いて動的にメモリを確保することができます


a[0] = (int*)malloc(sizeof(int)*3);


が実行されると


malloc(sizeof(int)*3)


により

intは4バイトのデータ格納容量を持つため


12バイト分のメモリが確保されます


そのメモリの先頭のアドレスが


戻り値として


malloc(sizeof(int)*3)


に返されることになるのですが


malloc(sizeof(int)*3)をint*型にキャストすることにより


int*型のポインタ変数a[0]に確保したメモリの先頭のアドレスを代入することができます


同様に


a[1] = (int*)malloc(sizeof(int)*3);


が実行されると


malloc(sizeof(int)*3)


により

intは4バイトのデータ格納容量を持つため


12バイト分のメモリが確保されます


そのメモリの先頭のアドレスが


戻り値として


malloc(sizeof(int)*3)


に返されることになるのですが


malloc(sizeof(int)*3)をint*型にキャストすることにより


int*型のポインタ変数a[1]に確保したメモリの先頭のアドレスを代入することができます



int*型のポインタ変数

a[0]

a[1]

にアドレスが代入されることにより



a[0]に[]演算子を用いた



a[0][0]

a[0][1]

a[0][2]


a[1]に[]演算子を用いた


a[1][0]

a[1][1]

a[1][2]


をもちいてデータを格納することができるようになります


このとき


a[0]に[]演算子を用いた


a[0][0]

a[0][1]

a[0][2]


a[1]に[]演算子を用いた


a[1][0]

a[1][1]

a[1][2]

int型の配列変数であり


int型の配列変数

a[0][0]

a[0][1]

a[0][2]


a[1][0]

a[1][1]

a[1][2]

には

整数値データを格納することができます


そのプログラムはこちらです

👇

#include <stdio.h>

#include <stdlib.h> /* malloc関数を用いるにはヘッダファイル<stdlib.h>をインクルードします*/


int main(void) {


int** a;


a = (int**)malloc(sizeof(int*)*2);

//malloc関数を用いてメモリを8バイト分確保しています


a[0] = (int*)malloc(sizeof(int)*3);

a[1] = (int*)malloc(sizeof(int)*3);


a[0][0]=1;

a[0][1]=2;

a[0][2]=3;


a[1][0]=4;

a[1][1]=5;

a[1][2]=6;


printf("%d\n",a[0][0]);

printf("%d\n",a[0][1]);

printf("%d\n",a[0][2]);

printf("%d\n",a[1][0]);

printf("%d\n",a[1][1]);

printf("%d\n",a[1][2]);

return 0;

}


ビルド実行結果

1

2

3

4

5

6


solarplexuss「


int型の配列変数

a[0][0]

a[0][1]

a[0][2]

a[1][0]

a[1][1]

a[1][2]


に数値を代入することができた


つまり


2次元配列aの配列変数


a[0][0]

a[0][1]

a[0][2]

a[1][0]

a[1][1]

a[1][2]

数値が代入することと等しいことがおこっちゃったっぴ🐤」


アレサ「ほんとですの


このような使い方が


int**型のポインタ変数にはあるのですね」



  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る