ポインタ変数や配列をつかって数値やデータ、文字データ、文字列データをコンピュータのメモリに格納する方法 まとめ

Visual Studio2019以降のヴァージョンではポインタ変数を使って文字列データをメモリに格納する機能は削除されています ご注意ください





アレサ「


ポインタ変数や配列をつかって数値データや文字データ、文字列データ

をコンピュータのメモリに簡単に格納する方法をまとめてみました。


1つの数値データを変数を使ってメモリに格納するなら

int a=1;

float b=1.11111;など


1つの文字データを変数を使ってメモリに格納するなら

char a='b';


1つの数値データを配列を使ってメモリに格納するなら

int hairetu[5]={1};


1つの数値データをポインタ変数を使ってメモリに格納するなら


int a;

int* pta;(ptaのポインタ変数宣言)

pta=&a;(ポインタ変数ptaに変数aのアドレスを格納)

*pta=1;

と表記します

👆

これらの命令文により

変数aのアドレス番号の付いたメモリに数値データ1が

格納されることになります


int a;


が実行されて


変数aは初期化されていなければ

4198543

などのような数値データを格納していますが

int* pta;(ptaのポインタ変数宣言です)

pta=&a;(ポインタ変数ptaに変数aのアドレスを格納しています)

*pta=1;(変数aのアドレス番号の付いたメモリに数値1を格納)

を実行して

変数aのアドレス番号の付いたメモリに格納されている数値データを1に

変更しています。



1つのchar型の変数aのアドレスデータをchar*型のポインタ変数ptaを使ってメモリに格納するなら


char* pta=&a;


のように命令文を記述します。


1つのint型の変数bのアドレスデータをint*型のポインタ変数を使ってメモリに格納するなら


int* pta=&b;


のように命令文を記述します。








複数の数値データを簡単に配列を使ってメモリに格納するなら


int hairetu[5]={1,2,3,4,5};


のように命令文を記述します。


複数の数値データを簡単にポインタ変数を使ってメモリに格納する方法は

先のエピソードでもみてきたように

なしです(⋈◍>◡<◍)。✧♡💖



簡潔にはできませんが

複数の数値データをポインタ変数を使ってメモリに格納するには


格納したい数値をひとつずつ


先程の

「一つの数値データをポインタ変数を使ってメモリに格納する方法」


を使って格納していきます。


そのため


格納したい数値データの数だけ


変数とポインタ変数を用意することになるのです。


おまけ


複数のchar型の変数のアドレスデータ(char*型のポインタ変数にアドレスは格納されることになります)




を簡単に配列を使ってメモリに格納するなら


char a;

char b;

char c;



char* hairetu[3]={&a,&b,&c};


のように命令文を記述します。


この場合


char*型のポインタ変数


hairetu[0]

hairetu[1]

hairetu[2]


が生成され


hairetu[0]=&a;

hairetu[1]=&b;

hairetu[2]=&c;


が実行されることになります





複数のint型の変数のアドレスデータ(int*型のポインタ変数にアドレスは格納されることになります)


を簡単に配列を使ってメモリに格納するなら


int a;

int b;

int c;



int* hairetu[3]={&a,&b,&c};


のように命令文を記述します。


この場合


int*型のポインタ変数


hairetu[0]

hairetu[1]

hairetu[2]


が生成され


hairetu[0]=&a;

hairetu[1]=&b;

hairetu[2]=&c;


が実行されることになります



1つの文字データを配列を使ってメモリに格納する場合は

char hairetu[ ]={'n'};


を実行します


char型の配列変数hairetu[0]が生成され


hairetu[0]='n';


が実行されることになります


1つの文字データをポインタ変数を使ってメモリに格納することはできません


char* hairetu={'n'};


を実行することはできません


複数の文字データを簡単に配列を使ってメモリに格納する場合は

char hairetu[ ]={'n','e','k','o'};


複数の文字データを簡単にポインタ変数を使ってメモリに格納することはできません


char* hairetu={'n','e','k','o'};


を実行することはできません


一つの文字列データを配列を使ってメモリに格納する方法は

char hairetu[]="neko";


一つの文字列データをポインタ変数を使ってメモリに格納する方法は

char* hairetu="neko";


と表記するのでしたね。


複数の文字列データを簡単に1度に配列を使ってメモリに格納する方法は


たとえば


文字列データ

"apple"

"ringo"

"cashewnuts"

配列を使ってメモリに格納する場合は


2次元配列をつかって

char hairetu[3][11]={"apple","ringo","cashewnuts"};

のように

記述するのでしたね

💖💖💖


詳しくは


🌞🌞複数の文字列データを1つの配列宣言を使い同時にメモリに格納してみます その2

https://kakuyomu.jp/works/1177354054881541503/episodes/1177354054886412378


のエピソードをご覧ください


簡単でない方法は


メモリに格納したい文字列データの数だけ配列宣言をおこなっていきます。


例 文字列データ

"neko"

"tanoshii"

"konnbu"を配列を使ってメモリに格納したいなら


次のように1つずつ異なる配列宣言をおこないます


char hairetu[]="neko";

char hairetu1[]="tanoshii";

char hairetu2[]="konnbu";


複数の文字列データをポインタ変数をつかってメモリに格納する場合は


char* hairetu[]={"neko","tanoshii","konnbu"};


となります。


🐓. . .

   🐦. .

ちょおっと おまけです


上記とは関係ないことですが


例えば


main関数内で定義されたint型の配列newhairetuのアドレスを


格納しているポインタ変数newhairetuを


自作関数newmadefunctionの引数に参照渡しする場合は


int型の配列hairetu[]を自作関数newmadefunctionの引数にもちいて


void newmadefunction(int hairetu[])

と記述


あるいは


int*(イントアスタリスク)型のポインタ変数宣言を自作関数newmadefunctionの引数にもちいて


void newmadefunction(int* hairetu)


と表記します



int*(イントアスタリスク)型のポインタ変数宣言


int* hairetu


により


作製された


int*(イントアスタリスク)型のポインタ変数hairetuは


int型の変数を使ってメモリに数値データが格納されているときの


そのメモリのアドレスを格納します


つまり


main関数内で定義されたint型の配列newhairetuには


int型の配列変数


newhairetu[0]

newhairetu[1]

newhairetu[2]


が生成されていて整数値データが格納されています


その整数値データが格納されている


int型の配列変数newhairetu[0]のアドレスを


格納しているポインタ変数newhairetuは


int*(イントアスタリスク)型のポインタ変数となっています



int*(イントアスタリスク)型のポインタ変数newhairetu


を受け取るために


int*(イントアスタリスク)型のポインタ変数宣言


int* hairetu



void newmadefunction(int* hairetu)のように


自作関数newmadefunctionの引数として記述しているというわけです


int* hairetu

int*(イントアスタリスク)型のポインタ変数newhairetuが代入されると


hairetuには


int*(イントアスタリスク)型のポインタ変数newhairetuが格納しているアドレスが代入されることになります



つまり


int型の配列変数newhairetu[0]のアドレスが代入されることになります


すると


*hairetuは配列変数newhairetu[0]そのものを表すことになります



そして


hairetu+1には


int*(イントアスタリスク)型のポインタ変数newhairetu+1が格納しているアドレスが代入されることになります



つまり


int型の配列変数newhairetu[1]のアドレスが代入されることになります


すると


*(hairetu+1)は配列変数newhairetu[1]そのものを表すことになります











🐧. . .  🐧 . . .  🐧 . . .



1つの配列宣言

1つのポインタ変数宣言を使って


コンピュータのメモリに

数値データ

文字データ

文字列データが格納できるかどうかを


あらわす表を作製してみました




1つの配列宣言

1つのポインタ変数宣言を使って


コンピュータのメモリに

数値データ

文字データ

文字列データ

を格納するときの表です

👇


1つの配列宣言を使った場合

😇😇😇😇😇😇😇😇😇😇😇😇😇😇😇😇配列を使った場合

😝一つの数値データをメモリに格納する場合😇 ◎

😝複数の数値データをメモリに格納する場合😇 ◎

😋一つの文字データをメモリに格納する場合😇 ◎

😋複数の文字データをメモリに格納する場合😇 ◎

😋一つの文字列データをメモリに格納する場合😇 ◎

😋複数の文字列データをメモリに格納する場合😇 ◎(2次元配列を使用してね💖)



1つのポインタ変数宣言を使った場合

😇😇😇😇😇😇😇😇😇😇😇😇😇😇😇😇

😝一つの数値データをメモリに格納する場合😇◎(???)😇

😝複数の数値データをメモリに格納する場合😇☆できません😇

😋一つの文字データをメモリに格納する場合😇できません😇

😋複数の文字データをメモリに格納する場合😇できません😇

😋一つの文字列データをメモリに格納する場合😇◎😇

😋複数の文字列データをメモリに格納する場合😇できません ポインタ変数の配列宣言、具体的にはchar*型の配列宣言(ポインタ変数の配列宣言)

を用いてください😇



char*型の配列宣言を用いる場合


😋複数の文字列データをメモリに格納する場合😇◎😇


となります


おまけ


int*型の配列宣言を用いる場合


😋複数の変数のアドレスデータをメモリに格納する場合😇◎😇



となります


◎は可能をあらわしていますが


ポインタ変数を使って

一つの数値データをメモリに格納する場合は手間がかかります。



☆は


1つのポインタ変数宣言をつかって

複数の数値データを

コンピュータのメモリに格納できないことをあらわしています

一つの数値データをポインタ変数をつかってメモリに格納する方法を


複数回くりかえせば


コンピュータのメモリに複数の数値データを格納できます


しかし かなり手間です


ですから



1つのポインタ変数宣言を使って

複数の数値データを

コンピュータのメモリに格納できないときは


🍎1つの配列宣言を使って🍎


コンピュータのメモリに格納することになります」





ソーラー 「大分 分類したね。


ポインタ変数とは


どのようなものか 考察してきたけど


                           


        🌞 ポインタ変数をつかえば 🌞


     🌞 すでに変数に格納されているデータに 🌞


         🌞 アクセスして 🌞


  🌞 変数に格納されているデータを変更することができるんだね🌞





自作関数の引数にポインタ変数ptxを用い


main関数内で変数宣言された変数aのアドレス&aを


ptx=&a;


と代入する参照渡しを行うことにより


*ptxをもちいて変数aに格納されている値を変更する


つまり


main関数内で変数宣言された変数aの値を変更するというのも


その1例だね。」


アレサ 「とりあえずポインタ変数のお話は


ここでおしまい


めでたし、めでたしっとなります。」


ソーラー「ポインタ変数 これでおわり・・・?


おおっやった・・・」


ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//

ぴこぴこりんりん🌞ぴこぴこりんりん🌞ぴこぴこりんりん🌞//


ソーラー「な、なんだ???なんだ??」


アレサ「きゃっ」




🐹🐹「お見事 ̄ ̄ ̄ ̄ ̄ ̄


        🌞 ポインタ変数をつかえば 🌞


     🌞 すでに変数に格納されているデータに 🌞


         🌞 アクセスして 🌞


  🌞 変数に格納されているデータを変更することができるんだね🌞


呼ばれてでてきたこの僕


ポインタ変数デェイブレイクううっ



そう、そう、そう


あとは実際のプログラムの中で


ポインタ変数の使い方を勉強していけばいいと思うんだ。


ねえーー


勉強してってぇ~~~」


ソーラー「あれ、


君・・・君の名は・・・  」


ポインタ変数「君たちがマニアックに


ここまですすんでくれたおかげで


やっと現れることができたよ~・・・V」


アレサとソーラーの前に


ポインタ変数が、はしゃいであらわれる。


ソーラー 「君の名は・・・おもいだしてきたあああああ


おおおぅぉぉぉおお


そう、真名、真名だ


こんなところで・・・


今までどうしてたんだ・・・


僕、僕だよ ソーラーだよ」


真名に激しくせまる。


おろおろと動揺する真名。


ソーラー「おおおおおおんんんん


忘れたのかい ボケてるのかい?


ボケまっくってるのかい?


そう、そうなのか


こんなに元気ピンピン状態じゃないか・


お茶目さんめ・・


嬉しいよ・・・


10年前に別れ別れになった・・・」


アレサ 「はっ・・真名さん・・・?」


ポインタ変数「真名じゃないっ!ぅて


このカクヨムで


どっかで出た名前じゃないの


そ・れ


ここまでさんざんやってきた


わかるぅ


もうわかってるんだよねぇ?、ねえ


ポインタ変数はむずかしいていうもんで


いままで僕、かくれちゃっていたもんね。


ま、僕の存在を*ptaって*印つけといて


さりげなくアピールはしてたんだよ


さすがに 解説してる君たちには


最初から僕がみえてたみたいだけど・・・


やっぱり そうだよねぇ」


ソーラー「ポインタ変数・・なんかC言語キャラがでてこず


お話が静かに進んでいるとおもったら


目の前にかくれてたのか・・・」


ポインタ変数「これだけ登場しといて


うち ポインタ変数 僕のことがみえてなかったんか~い


まあ、もう、ぷんぷんんん


そう


この僕


ポインタ変数


使っていったら


もう簡単ン簡単ン


ルンルン状態が年中つづく、つづいていく~~


プログラム、たのし~ってなるわけぇぇ


いいじゃ~ん ね」


ソーラー「たのもしいな~ よろしくたのむね」


握手を交わす


ポインタ変数とアレサとソーラー


アレサ「ポインタ変数さんに


出会えて めでたし、めでたし ですの。」




           ポインタ変数が仲間になった。




ポインタ変数は


プログラムのいたるところで登場します


ポインタ変数の仕組みは


C言語の基本的なシステムとなっています


みなさん


ポインタ変数をよろしくね🌞


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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