第9講 箱の住所を入れる箱(ポインタ)
第7話 ポインタによるデータの丸ごとコピー

前話問題
C
解答例
#include<stdio.h>
#include <stdlib.h>
int main(){
  int *a,*b;
  a=(int *)malloc(40);
  b=(int *)malloc(40);
  int i;
  for(i=0;i<10;i++){
    a[i]=rand()%100;
  }
  printf("*aのデータ\n");
  for(i=0;i<10;i++){
    printf("%d ",a[i]);
  }
  printf("\n");
  
b=a;
  printf("*bのデータ\n");
  for(i=0;i<10;i++){
    printf("%d ",b[i]);
  }
  printf("\n");
}

データ10個のコピーが
  
b=a;

の1回の処理で済んでいます。
データ数が10個ですので、
処理時間にほとんど差はありませんが、
データ数が10万個ぐらいになってくれば、
ポインタの方が有利になってきます。

皆さん、
コードを次のように変更したどうなるかわかりますか。
#include<stdio.h>
#include <stdlib.h>
int main(){
  int *a,*b;
  a=(int *)malloc(40);
  b=(int *)malloc(40);
  int i;
  for(i=0;i<10;i++){
    a[i]=rand()%100;
  }
  printf("*aのデータ\n");
  for(i=0;i<10;i++){
    printf("%d ",a[i]);
  }
  printf("\n");
  b=a;
  printf("*bのデータ\n");
  for(i=0;i<10;i++){
    printf("%d ",b[i]);
  }
  printf("\n");
  a[4]=100;
  printf("*aのデータ\n");
  for(i=0;i<10;i++){
    printf("%d ",a[i]);
  }
  printf("\n");
  printf("*bのデータ\n");
  for(i=0;i<10;i++){
    printf("%d ",b[i]);
  }
  printf("\n");
}
答えは30行下。




























答え
C言語
a[4]だけに代入したはずなのに、
b[4]の値まで変わってしまいました。
なぜ、このようなことになってしまうのでしょうか。

第6話へ 第8話へ

a

初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
VC++入門
VBA入門
専門用語なしのVBA入門
VB入門
初心者のためのEclipseによるJava入門