配列をポインタで表現してみよう
#include <iostream>
using namespace std;
int main(){
int a[] = {1,2,3};
int *b;
//ポインタbにaの先頭アドレスを代入
b = a;
//先頭アドレスの値を表示する
cout << *b << endl;
}
実行結果は以下の通りです。
1
このように*bは配列の先頭アドレス=a[0]の値を返します。
それでは、配列1番目と2番目を取得できないのだろうか?それはポインタを1つ増やせば取得可能です(=1つ次のメモリに進みます。)。
どのように進むかというとポインタを1増やしますのでp+1となります。
上記の配列はint型の配列なので、pのメモリが100なら、p+1は104になります。何故なら、int型は4バイトなので、メモリも1つの配列要素につき4つ分確保しているからです。
#include <iostream>
using namespace std;
int main(){
int a[] = {1,2,3};
int *b;
//ポインタbにaの先頭アドレスを代入
b = a;
//各要素のアドレスの値を表示する
for(int i=0;i<3;i++){
cout << *b++ << endl;
}
}
実行結果は以下の通りです。
1
2
3
また、ポインタは配列の値をそのまま出力することが出来ます。
b[0]で1が、b[1]で2が、b[2]で3が出力される。
配列の引数
引数に配列を渡してみましょう。
下記のプログラムは配列の最小値を求めるプログラムとなります。
#include <iostream>
using namespace std;
//配列要素の最小値を求める
int min(int a[], int n){
//ひとまず先頭を仮の最小値として設定
int min = a[0];
for(int i = 1 ; i<n ; i++){
//現在の値より更に小さい値が出た場合
if(min > a[i]){
min = a[i];
}
}
return min;
}
int main(){
int a[] = {100,50,666,4,56};
//配列の最小値を表示する
cout << min(a,sizeof a / sizeof a[0]) << endl;
}
実行結果は以下の通りです。
4