第12講 ベクタの学習
第3話 2次元配列と2次元ポインタをmainで定義しmainでデータも作成する

実行結果
配列の場合
x[0]=5 x[1]=6 x[2]=7 x[3]=8 x[4]=9
*(x+0)=5 *(x+1)=6 *(x+2)=7 *(x+3)=8 *(x+4)=9
y[0][0]=1 y[0][1]=2 y[0][2]=3 y[0][3]=4 y[0][4]=5
y[1][0]=6 y[1][1]=7 y[1][2]=8 y[1][3]=9 y[1][4]=10
y[2][0]=11 y[2][1]=12 y[2][2]=13 y[2][3]=14 y[2][4]=15
y[3][0]=16 y[3][1]=17 y[3][2]=18 y[3][3]=19 y[3][4]=20
y[4][0]=21 y[4][1]=22 y[4][2]=23 y[4][3]=24 y[4][4]=25
*(*(y+0)+0)=1 *(*(y+0)+1)=2 *(*(y+0)+2)=3 *(*(y+0)+3)=4 *(*(y+0)+4)=5
*(*(y+1)+0)=6 *(*(y+1)+1)=7 *(*(y+1)+2)=8 *(*(y+1)+3)=9 *(*(y+1)+4)=10
*(*(y+2)+0)=11 *(*(y+2)+1)=12 *(*(y+2)+2)=13 *(*(y+2)+3)=14 *(*(y+2)+4)=15
*(*(y+3)+0)=16 *(*(y+3)+1)=17 *(*(y+3)+2)=18 *(*(y+3)+3)=19 *(*(y+3)+4)=20
*(*(y+4)+0)=21 *(*(y+4)+1)=22 *(*(y+4)+2)=23 *(*(y+4)+3)=24 *(*(y+4)+4)=25

ポインタの場合
x[0]=5 x[1]=6 x[2]=7 x[3]=8 x[4]=9
*(x+0)=5 *(x+1)=6 *(x+2)=7 *(x+3)=8 *(x+4)=9
y[0][0]=1 y[0][1]=2 y[0][2]=3 y[0][3]=4 y[0][4]=5
y[1][0]=6 y[1][1]=7 y[1][2]=8 y[1][3]=9 y[1][4]=10
y[2][0]=11 y[2][1]=12 y[2][2]=13 y[2][3]=14 y[2][4]=15
y[3][0]=16 y[3][1]=17 y[3][2]=18 y[3][3]=19 y[3][4]=20
y[4][0]=21 y[4][1]=22 y[4][2]=23 y[4][3]=24 y[4][4]=25
*(*(y+0)+0)=1 *(*(y+0)+1)=2 *(*(y+0)+2)=3 *(*(y+0)+3)=4 *(*(y+0)+4)=5
*(*(y+1)+0)=6 *(*(y+1)+1)=7 *(*(y+1)+2)=8 *(*(y+1)+3)=9 *(*(y+1)+4)=10
*(*(y+2)+0)=11 *(*(y+2)+1)=12 *(*(y+2)+2)=13 *(*(y+2)+3)=14 *(*(y+2)+4)=15
*(*(y+3)+0)=16 *(*(y+3)+1)=17 *(*(y+3)+2)=18 *(*(y+3)+3)=19 *(*(y+3)+4)=20
*(*(y+4)+0)=21 *(*(y+4)+1)=22 *(*(y+4)+2)=23 *(*(y+4)+3)=24 *(*(y+4)+4)=25

を導くプログラムコード例
#include <stdio.h> //printfを使うためにインクルード
#include <stdlib.h> //mallocを使うためにインクルード
void f(int *x,int y[5][5]);
void g(int *x,int **y);
void main(){
   int x[5];
   int *y=(int *)malloc(sizeof(int)*5);
   int i;
   for(i=0;i<5;i++)x[i]=i+5; //データ作成
   for(i=0;i<5;i++)*(y+i)=i+5; //データ作成
   int p[5][5];
   int j;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
        p[i][j]=5*i+j+1;
     }
   }
   int **q=(int **)malloc(sizeof(int)*5);
   for(i=0;i<5;i++)q[i]=(int *)malloc(sizeof(int)*5);
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
        q[i][j]=5*i+j+1;
     }
   }
   printf("配列の場合\n");
   f(x,p); //配列の場合
   printf("\n");
   printf("ポインタの場合\n");
   g(y,q); //ポインタの場合
}
void f(int *x,int y[5][5]){
   int i;
   //データを配列要素を使って表示
   for(i=0;i<5;i++)printf("x[%d]=%d ",i,x[i]);
   printf("\n");
   //データをアドレスを使って表示
   for(i=0;i<5;i++)printf("*(x+%d)=%d ",i,*(x+i));
   printf("\n");
   //データを配列要素を使って表示
   int j;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
        printf("y[%d][%d]=%d ",i,j,y[i][j]);
     }
     printf("\n");
   }
   //データをアドレスを使って表示
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
        printf("*(*(y+%d)+%d)=%d ",i,j,*(*(y+i)+j));
     }
     printf("\n");
   }
}
void g(int *x,int **y){
   int i;
   //データを配列要素を使って表示
   for(i=0;i<5;i++)printf("x[%d]=%d ",i,x[i]);
   printf("\n");
   //データをアドレスを使って表示
   for(i=0;i<5;i++)printf("*(x+%d)=%d ",i,*(x+i));
   printf("\n");
   //データを配列要素を使って表示
   int j;
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
        printf("y[%d][%d]=%d ",i,j,y[i][j]);
     }
     printf("\n");
   }
   //データをアドレスを使って表示
   for(i=0;i<5;i++){
     for(j=0;j<5;j++){
        printf("*(*(y+%d)+%d)=%d ",i,j,*(*(y+i)+j));
     }
     printf("\n");
   }
}

第4話では、ベクタと配列・ポインタの同一性を見ます。
そして、第5話ではベクタの方が、
配列・ポインタより優れている点を見ます。



第2話へ 第4話へ


a

eclipse c++ 入門講義第1部へ

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