おさらい(^_-)-☆ 配列変数a[i]はポインタ変数aを用いてa[i]=*(a+i); で表されます a+iはポインタ演算と呼ばれます

ソーラー「今度は


配列aを用いて


文字列データ"la"が


メモリに格納される様子をご覧ください



#include <stdio.h>


int main() {


char a[3] = "la";


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

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

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

printf("%s\n", a);


return 0;


}


ビルド実行結果


l

a

(空白)

la


ソーラー「このプログラムでは


aの配列宣言、初期化


char a[3] = "la";


の実行により


配列変数


a[0]

a[1]

a[2]



文字データ

'l'

'a'

'\0'


a[0]='l';

a[1]='a';

a[2]='\0';


と格納されています


配列変数a[0]は文字列データ"la"の先頭の文字データ'l'を格納しています


このとき


aは配列変数a[0]のアドレスを格納しているポインタ変数です


また


aは文字列データ"la"を格納しているメモリの先頭のアドレスを格納しているポインタ変数ともいえます


aは配列変数a[0]のアドレスを格納しているポインタ変数ですが


         aに1を加えた


a+1


は配列変数a[1]のアドレスを格納しているポインタ変数となります


         aに2を加えた


a+2


は配列変数a[2]のアドレスを格納しているポインタ変数となります」


アレサ「


a+1

a+2


数値でないアドレスを格納しているポインタ変数aに


数値

1

2

を足して


まるで


数値計算をおこなっているように見えます


ポインタ変数aに数値データを加える

a+1

a+2

のような計算は

            ポインタ演算


と呼ばれるのでしたね


a+1

a+2


a[1]

a[2]


のアドレスを格納しているポインタ変数となります


ですので


aにアスタリスク演算子*を作用させた*aはa[0]


を表すことになりましたね


そして


(a+1)にアスタリスク演算子*を作用させた*(a+1)はa[1]


(a+2)にアスタリスク演算子*を作用させた*(a+2)はa[2]


を表すことになります


つまり


a[0]=*a

a[1]=*(a+1)

a[2]=*(a+2)


が成立します



一般に


a[i]=*(a+i)


が成立します


このことは


aのポインタ変数宣言、初期化



     🍋char *a = "la";🍋



が実行されたときにも成立します


次のプログラムをご覧ください

👇

#include <stdio.h>


int main() {



char *a = "la";


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

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

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

printf("%s\n", a);


return 0;


}


ビルド実行結果


l

a

(空白)

la


ソーラー「このプログラムでは


aのポインタ変数宣言、初期化


char *a = "la";


の実行により


生成される

配列変数


a[0]

a[1]

a[2]



文字データ

'l'

'a'

'\0'


a[0]='l';

a[1]='a';

a[2]='\0';


と格納されています


配列変数a[0]は文字列データ"la"の先頭の文字データ'l'を格納しています


このとき


aは配列変数a[0]のアドレスを格納しているポインタ変数です


また


aは文字列データ"la"を格納しているメモリの先頭のアドレスを格納しているポインタ変数ともいえます


aは配列変数a[0]のアドレスを格納しているポインタ変数ですが


         aに1を加えた


a+1


は配列変数a[1]のアドレスを格納しているポインタ変数となります


         aに2を加えた


a+2


は配列変数a[2]のアドレスを格納しているポインタ変数となります」


アレサ「


a+1

a+2


数値でないアドレスを格納しているポインタ変数aに


数値

1

2

を足して


まるで


数値計算をおこなっているように見えます


ポインタ変数aに数値データを加える

a+1

a+2

のような計算は



            ポインタ演算



と呼ばれるのでしたね


a+1

a+2


a[1]

a[2]


のアドレスを格納しているポインタ変数となります


ですので


aにアスタリスク演算子*を作用させた*aはa[0]


を表すことになりますの


そして


(a+1)にアスタリスク演算子*を作用させた*(a+1)はa[1]


(a+2)にアスタリスク演算子*を作用させた*(a+2)はa[2]


を表すことになります


つまり


a[0]=*a

a[1]=*(a+1)

a[2]=*(a+2)


が成立します



一般に


a[i]=*(a+i)


が成立します」


ソーラー「どう


思い出したかな?」


アレサ「そう


a[i]=*(a+i)


が成立するのでしたね」


ソーラー「


ここで


もう1度


💖ポインタ変数💖


a

a+1

a+2


に御注目下さい


         💖ポインタ変数💖


a

a+1

a+2



配列変数 

a[0] 

a[1] 

a[2] 


のアドレスを格納しているポインタ変数でした」


つづく・・・




     

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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