第8講 ポインタと配列の学習
第4話 ポインタのWindows上での展開

今まで、コマンドライン上でポインタを展開してきましたが、
Windows上に戻りましょう。
というForm1を作り、次のようにプログラミングしてみましょう。
#pragma once
#include<stdlib.h>
char *i;
   ・
   ・
   ・
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           i=(char *)malloc;
         String^ w="";
         *i=45;
           *(i+1)=28;
         w=w+(*i).ToString()+L" "+(*(i+1)).ToString();
         label1->Text=w;
       }
   ・
   ・
ビルドして、ソフトを起動して実行ボタンを押すと、

となります。
i=(char *)malloc;にメモリを割り振る手続きです。
変数の場合は、コンピュータが自動的にメモリを割り振ってくれますが、
ポインタの場合はこのように書かないとメモリが割り振られません。
注目は、*(i+1)=28;の部分です。
ポインタはこのような使い方ができるのです。

  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
          i=(char *)malloc;
          String^ w="";
          *i=45;
            *(i+1)=28;
            *(i+2)=12;
           *(i+3)=84;
           *(i+4)=8;

          w=w+(*i).ToString()+L" "+(*(i+1)).ToString()+L" "+(*(i+2)).ToString()+L" "+(*(i+3)).ToString()+L" "+(*(i+4)).ToString();
          label1->Text=w;
        }
などと加えると、ビルドし実行ボタンを押すと、
となります。聡明な皆さんですからあることにお気づきでしょう。
これは、配列a[0]、a[1]、a[2]、a[3]、a[4]などと使い方が同じです。
Form1にlabel2を入れ、プログラムを
#pragma once
#include<stdlib.h>
char *i;
char a[5];
   ・
   ・
   ・
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
          i=(char *)malloc;
          String^ w="";
          *i=45;
            *(i+1)=28;
          *(i+2)=12;
          *(i+3)=84;
          *(i+4)=8;

          w=w+(*i).ToString()+L" "+(*(i+1)).ToString()+L" "+(*(i+2)).ToString()+L" "+(*(i+3)).ToString()+L" "+(*(i+4)).ToString();
          label1->Text=w;
            w=L"";
          a[0]=45;
          a[1]=28;
          a[2]=12;
          a[3]=84;
          a[4]=8;
          w=w+a[0].ToString()+L" "+a[1].ToString()+L" "+a[2].ToString()+L" "+a[3].ToString()+L" "+a[4].ToString();
          label2->Text=w;

        }
           ・
のように変更して、ソフトを起動し実行ボタンを押すと、
となって、配列とポインタがまったく同じであることがわかります。さらに、プログラムを
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
          i=(char *)malloc;
          String^ w="";
          char j;
          for(j=0;j<5;j++){
            *(i+j)=j+1;
            w=w+(*(i+j)).ToString()+L" ";
          }

          label1->Text=w;
            w=L"";
          for(j=0;j<5;j++){
            a[j]=j+1;
            w=w+a[j].ToString()+L" ";
          }
          
label2->Text=w;
        }
と変更してみると、
となります。
では問題を出して、第4話を閉じることにしましょう。
Form1とプログラムを変更して、ソフトを起動して実行ボタンを押したとき、

となるようにしましょう。ただし、左側はポインタ、右側は2次元配列によるものとします。




第3話へ 第5話へ



初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすい vb 入門 vba 入門 基礎から応用まで 第1部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ