第11講 配列・ポインタを関数に渡す  
第2話 2次元配列を関数に渡す
C言語
解答例
#include<iostream>
using namespace std;
void f(int *a);
int main(){
   int *a,i;
   a=(int *)malloc(40);
   for(i=0;i<10;i++)a[i]=i+1;
   cout<<"変換前 ";
   for(i=0;i<10;i++){
     if(a[i]<10)cout<<" "<<a[i]<<" ";
     if(a[i]>=10)cout<<a[i]<<" ";
   }
   cout<<endl;
   f(a);
   cout<<"変換後 ";
   for(i=0;i<10;i++){
     if(a[i]<10)cout<<" "<<a[i]<<" ";
     if(a[i]>=10)cout<<a[i]<<" ";
   }
   cout<<endl;
}
void f(int *a){
   int i;
   for(i=0;i<10;i++)a[i]=2*a[i];
}

では、次にポインタのポインタのアドレスを渡すことを考えましょう。
例えば、ポインタのポインタ
int **a,i;
a=(int **)malloc(20);
for(i=0;i<6;i++)a[i]=(int *)malloc(24);
のアドレスを渡すにはf(a);
とします。
それでは、2次元配列に値を代入して表示してから、
その配列を関数に渡して関数上でもコンソール画面に表示させるようにしましょう。
入門
解答例は30行下。


















解答例
#include<iostream>
using namespace std;
void f(int **a);
int main(){
   int **a,i,j;
   a=(int **)malloc(20);
   for(i=0;i<6;i++)a[i]=(int *)malloc(24);
   for(i=0;i<5;i++){
     for(j=0;j<6;j++){
       a[i][j]=6*i+j+1;
     }
   }
   cout<<"mainからの表示"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<6;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
     }
     cout<<endl;
   }
   cout<<endl;
   f(a);
}
void f(int **a){
   int i,j;
   cout<<"関数からの表示"<<endl;
   for(i=0;i<5;i++){
     for(j=0;j<6;j++){
       if(a[i][j]<10)cout<<" "<<a[i][j]<<" ";
       if(a[i][j]>=10)cout<<a[i][j]<<" ";
     }
     cout<<endl;
   }
}
コンソール画面

入門



解説
ポインタのポインタのアドレスを送ることのよって実質2次元配列を関数に渡したのと同じになっていることがわかります。
さらに、それがよくわかるように関数の機能は2倍化する働きのみ(つまり表示の機能は消す)とし、
変換前と変換後をいずれもmain側から表示させるプログラムに変更してみましょう。
C言語






第1話へ 第3話へ

戻る

C言語講義第1部へ
VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)