第9講 箱の住所を入れる箱(ポインタ)
第7話 ポインタによるデータの丸ごとコピー
前話問題
解答例
#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行下。
答え
a[4]だけに代入したはずなのに、
b[4]の値まで変わってしまいました。
なぜ、このようなことになってしまうのでしょうか。
第6話へ 第8話へ
初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
VC++入門
VBA入門
専門用語なしのVBA入門
VB入門
初心者のためのEclipseによるJava入門