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

ソーラー「🌞どう?🌞



char** a;


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


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


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


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


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


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


aに[]演算子を用いた


a[0]

a[1]


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


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


生成される

a[0]

a[1]

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


a[0]

a[1]

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



さらに


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

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


を実行して


char*型のポインタ変数


a[0]

a[1]

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


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


が実行されると


malloc(sizeof(char)*3)


により

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


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


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


戻り値として


malloc(sizeof(char)*3)


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


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


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


同様に


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


が実行されると


malloc(sizeof(char)*3)


により

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


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


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


戻り値として


malloc(sizeof(char)*3)


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


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


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



char*型のポインタ変数

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]

char型の配列変数であり


char型の配列変数

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) {


char** a;


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

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


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

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


a[0][0] = 'a';

a[0][1] = 'b';

a[0][2] = 'c';


a[1][0] = 'd';

a[1][1] = 'e';

a[1][2] = 'f';


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

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

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

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

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

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


return 0;

}


ビルド実行結果


a

b

c

d

e

f


solarplexuss「


char型の配列変数

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]

文字データが代入されることと等しいことがおこっちゃったっぴ🐤」


アレサ「ほんとですの


このような使い方が


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



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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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