■C++を学ぼう!
「C++を学ぼう!」では、C++の初心者をターゲットにC++言語を体系的に学べるようにサイトを構築しています。
管理人もC++を学びながら作っていますので、分かり難い点などあればご指摘下さい。

▼スポンサードリンク
■メニュー

(C)あいねこの館

文章などの改変・利用は禁止します
ポインタの配列

配列をポインタで表現してみよう
#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