第7講 ポインタの学習
第7話 2次元配列に対応するポインタは?
前話で、ポインタと配列の実体は同じものである・・・
ということが分かりました。
では、2次元配列に対応するポインタはどう宣言するのでしょうか。
例えば、
   int x[5][4];
対応するポインタを宣言するにはどうする?
答えは、
   int **x=(int **)malloc(sizeof(int
*)*5); //2016/12/27に間違いを訂正
   for(int i=0;i<5;i++)*(x+i)=(int *)malloc(sizeof(int)*4);
です。
実際次のコードを組んで試しましょう。
#include<iostream>
#include <stdlib.h>
using namespace std;
void f();
void g();
void main(){
   f();
   cout<<endl;
   g();
}
void f(){
   int x[5][4];
   int i,j;
   for(i=0;i<5;i++){
     for(j=0;j<4;j++){
        x[i][j]=4*i+j+1;
     }
   }
   for(i=0;i<5;i++){
     for(j=0;j<4;j++){
        if(x[i][j]<10)cout<<"0"<
<x[i][j]<< " "; else cout<<x[i][j]<<" ";
     }
     cout<<endl;
   }
}
void g(){
   int **x=(int **)malloc(sizeof(int *)*5); //2016/12/27に間違いを訂正
   int i;
   for(i=0;i<5;i++)*(x+i)=(int *)malloc(sizeof(int)*4);
   int j;
   for(i=0;i<5;i++){
     for(j=0;j<4;j++){
        x[i][j]=4*i+j+1;
     }
   }
   for(i=0;i<5;i++){
     for(j=0;j<4;j++){
        if(x[i][j]<10)cout<<"0"<<x[i][j]<< " "; else cout<<x[i][j]<<" ";
     }
     cout<<endl;
   }
}
同じ変数名xを使って問題ないことはお分かりですね。
関数は独立しているので、
問題ないのです。
変数にしても配列にしてもポインタにしても、
関数の中でしか通用しないローカル変数です。

実行結果
u
   int **x=(int **)malloc(sizeof(int
*)*5); //2016/12/27に間違いを訂正
   for(int i=0;i<5;i++)*(x+i)=(int *)malloc(sizeof(int)*4);
で2次元配列ができていることが分かります。
1行目
   int **x=(int **)malloc(sizeof(int *)*5);
で行数5が指定され、2行目
   for(int i=0;i<5;i++)*(x+i)=(int *)malloc(sizeof(int)*4);
で列数4が指定されるのです。

ポインタを学んだ現在、
配列を関数に渡す事が可能になりました。
1次元配列
   int x[10];
をmain()で定義して、それを関数f(int *x){またはf(int x[10])}とg(int *x){またはg(int x[10])}に渡し、
関数f(int *x){またはf(int x[10])}ではデータ(ランダムな1桁の整数)を生成させ、
関数g(int *x){またはg(int x[10])}ではそれをコンソールに表示するプログラムを考えましょう。
b
配列を引数にする場合
void f(int *x);   //関数側がポインタで受け取るとき
void f(int x[10]); //関数側が配列で受け取るとき
のようにプロトタイプ宣言をして、
main()からは、
   f(x);
のようにして関数fを呼び出します。
配列を送ると行っても正確には、
配列の先頭アドレスを送るということなのです。
では皆さんプログラムコードを考えてください。



第6話へ 第8話へ

a

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ