第11講 ポインタの学習

第8話 1次元配列を社員(関数)に送る
箱(変数)そのものを渡す手段はありませんが、
箱のアドレスを渡すことによって、
実質的に、配列を渡すことが出来ます。
そうです。
自分専用である配列(箱の集合)の秘密の隠し場所を他の社員に教えることによって、
他の社員はその箱の中身をいじれるようになるのです。
これこそがずっと皆さんを疑問の渦に巻き込んできた摩訶不思議な謎の正体です。
教えているのは箱集合のアドレスです。
配列を渡す例を書いてから、解説しましょう。
#include<stdio.h>
#include<stdlib.h>
void f(int *x); //データを作成する社員
void g(int *x); //データを表示する社員
int main(){
  int *x=(int *)malloc(sizeof(int)*5);
  f(x);
  g(x);
  return(0);
}
void f(int *x){
  int i;
  for(i=0;i<5;i++)x[i]=rand()%10;
}
void g(int *x){
  int i;
  for(i=0;i<5;i++)printf("%d ",x[i]);
  printf("\n");
}
コピペ用添付ファイル
実行画面
1 7 4 0 9

解説
  int *x=(int *)malloc(sizeof(int)*5);
としたとき、xには
配列xの先頭アドレスが収納されています。
もし、
w
であれば、x=1000です。
この住所1000を
  f(x);
  g(x);
によって、社員fとgに送っているのです。
実質的に配列を渡すのと同じと書きましたが、
正確には、
main専用の箱を1時的に社員fとgに使うことを認めている
といった方が良いでしょう。
箱のあり場所を教えて使わせているのです。
社員fは、その箱集合のそれぞれの箱に1桁のランダムデータを入れて、
社員gは、その箱集合のそれぞれの箱の中身を表示させています。

コードを次のように変更しても同じ結果になります。
#include<stdio.h>
#include<stdlib.h>
void f(int *x); //データを作成する社員
void g(int *x); //データを表示する社員
int main(){
  int x[5];
  f(x);
  g(x);
  return(0);
}
void f(int *x){
  int i;
  for(i=0;i<5;i++)x[i]=rand()%10;
}
void g(int *x){
  int i;
  for(i=0;i<5;i++)printf("%d ",x[i]);
  printf("\n");
}
配列x[5]の先頭アドレスが、xに収納されていることは同じなのです。
また、
#include<stdio.h>
#include<stdlib.h>
void f(int
x[]); //データを作成する社員
void g(int x[]); //データを表示する社員
int main(){
  int x[5];
  f(
x);
  g(
x);
  return(0);
}
void f(int x[]){
  int i;
  for(i=0;i<5;i++)x[i]=rand()%10;
}
void g(int x[]){
  int i;
  for(i=0;i<5;i++)printf("%d ",x[i]);
  printf("\n");
}
コピペ用添付ファイル
としても結果は同じです。
ポインタではなく配列を引数できるのですが、
ポインタを引数にすることと原理は同じです。
  f(
x);
  g(
x);
xは配列の先頭アドレスです。
配列そのものを送っているわけではなく、
配列の隠し場所を仕事を依頼する社員に教えて、
配列の中身を変更してもらったり、表示してもらったりしているわけです。


では、皆さん社員fとgに2次元配列を実質的に渡して、
実行画面が
1 7 4 0
9 4 8 8
2 4 5 5
1 7 1 1
5 2 7 6

となるようにして下さい。
条件は、fとgに2次元配列を渡し、
fで1桁のランダムデータを作成し、
gで表示させるものとします。





第7話へ   第9話へ

第2部目次に戻る  第1部目次に戻る

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
ecliqse c++ 入門
魔方陣 数独で学ぶ VBA 入門

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