#include <iostream>
using namespace std;
// じゃぁ。。。。C言語、C++でアドレスを見ることってできるの?
// int a = 5; <-int 型の変数a
// アドレス演算子 &
//(アドレスが確実に変数やオブジェクトに割り当てられていなければ取得できない)
// aのアドレス => &a
// cout << hex << &a; aのアドレス を 16進数で出力しなさい
void printArray(int _a[], int _num)
{
for(int i=0;i<_num;i++)
{
cout << i << " : " << _a[i] << endl;
}
}
void printArrayP(int *_p, int _num)
{
for(int i=0;i<_num;i++)
{
//cout << i << " : " << *(_p + i) << endl;
cout << i << " : " << _p[i] << endl;
}
}
int main() {
int a = 5;
cout << " a = " << a << endl;
cout << "&a = " << hex << &a << endl;
int aa[5] = {0, 1, 2, 3, 4 };
for(int i=0;i < 5;i++)
{
cout << " aa[" << i << "] = " << aa[i] << endl;
cout << "&aa[" << i << "] = " << hex << &(aa[i]) << endl;
}
//配列の名前は、配列の先頭アドレスを指す (&(aa[0]) == aa) <- true
cout << "aa+0 = " << hex << aa << endl;
//配列名に、配列の1要素の容量分ずつ、アドレスを足せます。
cout << "aa+1 = " << hex << aa+1 << endl;
cout << "aa+2 = " << hex << aa+2 << endl;
cout << "aa+3 = " << hex << aa+3 << endl;
cout << "aa+4 = " << hex << aa+4 << endl;
//メモリアドレスに*をつけるとその中の値を参照できる
cout << "aa+0の中身 = " << hex << *(aa+0) << endl;
cout << "aa+1の中身 = " << hex << *(aa+1) << endl;
cout << "aa+2の中身 = " << hex << *(aa+2) << endl;
cout << "aa+3の中身 = " << hex << *(aa+3) << endl;
cout << "aa+4の中身 = " << hex << *(aa+4) << endl;
//アドレスを入れる変数!
int *p = &(aa[0]);
//int *p = aa;
for(int i=0;i<5;i++)
{
cout << "*(p+" << i << ") = "
<< hex << *(p+i) << endl;
//<< hex << aa[i] << endl;
}
printArrayP(aa, 5);
}