配列とポインタ
配列の名前は、配列の先頭要素のアドレスを指します。これをポインタ変数に代入し、インクリメントしていくことで、配列の列挙ができます。
#include <iostream> int main() { int array[] = { 100, 200, 300 }; // ポインタ変数の宣言 int *pointer; // ポインタ変数に配列の先頭アドレスを代入/アドレス演算子「&」は不要。 pointer = array; // ポインタの値の参照。最初のアドレスの値が返される std::cout << *pointer << std::endl; // 100 // ポインタをインクリメント。次の配列要素のアドレスに移動する。 pointer++; std::cout << *pointer << std::endl; // 200 pointer++; std::cout << *pointer << std::endl; // 300 return 0; }
実行結果です。
100 200 300
関数の引数で配列を渡す
配列のポインタは関数の引数として配列を渡す際にも利用されます。
というか、配列の値渡しはできない、ということですね。Javaと同じ。
#include <iostream> /** * 配列を引数で受け取り、合計値を返す関数。 */ int sum( int *array, int size ) { int sum = 0; for ( int i = 0; i < size; i++ ) { sum += *(array++); // *は++より強いので、本当は()は不要。 } return sum; } int main() { int array[] = { 100, 200, 300 }; // 配列を引数で渡す。 // 先頭のアドレスだけでは配列の要素数が取れないので呼び出し元で計算し渡す。 std::cout << sum( array, sizeof array / sizeof array[0] ) << std::endl; // 600 return 0; }
実行結果です。
600