天国にいけるC言語入門 ヘキサ構造体 ver2.2126
char**型のポインタ変数を用いればmalloc関数を2度用いることにより2次元配列的にメモリを確保することができ文字データを代入することができます
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**型のポインタ変数にはあるのですね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます