タグ:

ポインタの基本

サンプルコード[c++]

#include <iostream>
using namespace std;

void FuncA(int *p){
	*p = *p * 2;
}
void FuncB(int &p){
	p = p + 10;
}

int main() {
	int p = 1;
	int *ap = &p; //apはpのアドレス
	cout << p << " : " << *ap << "\n";
	FuncA(ap); //ポインタ変数を渡す
	cout << p << " : " << *ap << "\n";
	FuncA(&p); //アドレスを渡す
	cout << p << " : " << *ap << "\n";
	FuncB(*ap); //ポインタ変数が指すアドレスの値を渡す
	cout << p << " : " << *ap << "\n";
	FuncB(p);  //実体変数をそのまま渡す
	cout << p << " : " << *ap << "\n";
	cin >> ret;

	return 0;
}

変数型 *(アスタリスク)変数名でポインタ変数を作成します。*の前か後かスペースを入れるかは個人の趣味です。私は[int *a,*b;]と言うように連続して書く場合があるので、前にスペースを入れるのが好きです。


ポインタで配列走査

サンプルコード[c++]

#include <iostream>
using namespace std;

int main() {
  int i,p[5] = {1,2,3,4,5};
  const int arrSize = sizeof p / sizeof p[0];
  int *ap = p; 
  char ret[10];
  for (i = 0; i < arrSize; i++){
    cout << "a[" << i << "]=" << p[i] << "\n";
  }
  for (i = 0; i < arrSize; i++){
    cout << i << "番目=" << *ap << "\n";
    *ap++;
  }
  cin >> ret;
  return 0;
}

ポインタ変数の参照先を配列にした場合は、要素の先頭へ参照が割り当てられる。それをインクリメントしてやれば、ポインタ変数の型のサイズ分だけアドレスが動くので、次の要素を参照するようになる。