53歳からの挑戦、プログラミング、英会話、筋トレ -3ページ目

53歳からの挑戦、プログラミング、英会話、筋トレ

若者のすなるプログラミングというものを50歳の私もしてみんとてするなり
とりあえず、C言語から始めます。

C言語のポインタ配列をほかの関数で使用するときは当然引数で引き渡んだよね。

だけどね、この間もやったけど配列を渡すときってポインタ渡しでしょう。

ポインタ配列も同様にポインタ渡しなんだよね。

でも、すでにポインタだから、ポインタのポインタ渡しになるんだね、なんだかややこしいね。

ややこしいけど、下にプログラムを貼ったよ。

関数で表示させてるパターンと前回やったmain内での表示の2つだね。

int *po[5] の部分がポインタ配列の宣言だね

ポインタにはアドレスをぶっこむから、

po[0]=&aの部分でアドレスをぶっこんでるね

だから、

po[i]は配列に入っているa,b,c...それぞれのアドレスだよね。

&po[i]は配列そのもののアドレスだよね

*po[i]は配列poに入っているアドレスに格納されている値だね。

要素がポインタ(アドレス)であるところの配列があるんだって

人呼んでポインタ配列

かっこいいね下にプログラムを貼ったよ。

int *po[5] の部分がポインタ配列の宣言だね

ポインタにはアドレスをぶっこむから、

po[0]=&aの部分でアドレスをぶっこんでるね

だから、

po[i]は配列に入っているa,b,c...それぞれのアドレスだよね。

&po[i]は配列そのもののアドレスだよね

*po[i]は配列poに入っているアドレスに格納されている値だね。

1. 配列名が先頭アドレス

    abc[10]があったとすると

    abcは配列abcの先頭アドレスを示すんだよね。

 

    でね、*abc+iとすることでabc[i]を指示してるんだね。アドレス計算っていうんだってね。

    &abc[0] と  abcは同じ意味だね。(どっちもabc[10]の先頭アドレス)

 

2. 配列を関数間で受け渡すとき

    関数間で受け渡すときは、配列の先頭アドレスを受け渡すんだよね。

  main関数内で

       kannsuu(abc);

 

    void kansuu(int *p){

    int i;

    for(i=0;i<3;i++){

        printf("%d",*(p+i));

    }

 

    だけどの配列の大きさ(サイズ)も一緒に引数として渡さないと困ることがあるかもね

    サイズの計算はsizeofでできるよ。

  sizeof(abc)で配列abc全体の大きさ

  sizeof(abc[0])で配列のレコードの大きさ

  で、割り算して配列の要素数を出してるんだね。

 

    main内

       int size= sizeof(abc)/sizeof(abc[0]);

     kannsuu(abc,size);

   

    main外

           void kansuu(int *p,int size){

           int i;

          for(i=0;i<3;i++){

              printf("%d",*(p+i));

          }

 

3. 引数が変更されないようにするためには

    仮引数にconstを付ける、これで変更はできませんよ~と言う話。

  

           void kansuu(const int *p,int size){

           int i;

          for(i=0;i<3;i++){

              printf("%d",*(p+i));

          }

 

C言語では char 型(文字型)を使用して文字を扱うんだよね。

"abcdefg"みたいな文字列を扱うときは配列を使うしかないんだよね

噂によるとC++では文字列型があるというね。なんかよくわからないけどワクワクするよ。

 

表示法としては

char abc[10] = "abcdefg";

で表示するには、、

一文字づつ配列を動かしてみるのと

文字列で一気に見るのがあるね

こんな感じかな。 フォーマット指定子とか、変換指定子なんて呼んでる %s、%dだね。

%cは一文字のみ

%sは文字列だね。

上のサンプルプログラムでは%sによる出力と %sによる一気に出力の両方をやってみたよ。

当然、結果は同じだよね。

久しぶりですが、今日はプログラムにおけるメモリ空間の使用について

まとめてみたよ。

一部問題があるかもしれないが、おおよそ次のようになるのではと思うよ。

俯瞰して全体を見るのも大切だね。