第7講 箱の住所を代入できる箱(ポインタ)の学習
第7話 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に収納されていることは同じなのです。

では、皆さん社員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で表示させるものとします。


第6話へ 第8話へ

a


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

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ