記述の一貫性が全く掴めないので自分用まとめ。後で表組みはしたい
コンパイルが通る記述で有ることを確認するためのコード
#include <cstdio>
class CClass {
public:
int i;
int ai[3];
void F() {
printf("## F\n");
printf("- i:%d\n", i);
printf("- ai:%p\n", ai);
printf("- *ai:%d\n", *ai);
printf("- ai[0]:%d\n", ai[0]);
printf("- ai[1]:%d\n", ai[1]);
printf("- ai[2]:%d\n", ai[2]);
}
};
int main() {
// 変数
printf("____VARIABLE_BEGIN____\n");
int i = 1; // iへ1を代入
int j = i; // iの値(1)をjへコピー
int &rk = i; // iのリファレンスrkを定義
int *pi = &i; // ポインターpiへiのアドレスを代入
printf("- i: %d\n", i);
printf("- j: %d\n", j);
printf("- rk: %d\n", rk);
printf("- pi: %p\n", pi);
printf("- *pi: %d\n", *pi);
printf("# ++i: %d\n", ++i);
printf("- i: %d\n", i);
printf("- j: %d\n", j);
printf("- rk: %d\n", rk);
printf("- pi: %p\n", pi);
printf("- *pi: %d\n", *pi);
printf("# --j: %d\n", --j);
printf("- i: %d\n", i);
printf("- j: %d\n", j);
printf("- rk: %d\n", rk);
printf("- pi: %p\n", pi);
printf("- *pi: %d\n", *pi);
printf("# ++rk: %d\n", ++rk);
printf("- i: %d\n", i);
printf("- j: %d\n", j);
printf("- rk: %d\n", rk);
printf("- pi: %p\n", pi);
printf("- *pi: %d\n", *pi);
printf("# ++*pi: %d\n", ++*pi);
printf("- i: %d\n", i);
printf("- j: %d\n", j);
printf("- rk: %d\n", rk);
printf("- pi: %p\n", pi);
printf("- *pi: %d\n", *pi);
printf("____VARIABLE_END____\n");
// 配列
printf("____ARRAY_BEGIN____\n");
int ai[3]; // 配列ai[3]を定義
int *pai = ai; // 配列aiの先頭のアドレスをポインターpaiへ代入
int (&rai)[3] = ai; // 配列aiのアドレスをリファレンスrai[3]へ代入
ai[0] = 1000;
ai[1] = 2000;
ai[2] = 3000;
printf("# ai[0] = 1001: %d\n", ai[0] = 1001);
printf("- ai: %p\n", ai);
printf("- ai[0]: %d\n", ai[0]);
printf("- ai[1]: %d\n", ai[1]);
printf("- ai[2]: %d\n", ai[2]);
printf("- pai: %p\n", pai);
printf("- *pai: %d\n", *pai);
printf("- rai: %p\n", rai);
printf("- rai[0]: %d\n", rai[0]);
printf("- *rai: %d\n", *rai);
printf("# ai[1] = 2001: %d\n", ai[1] = 2001);
printf("- ai: %p\n", ai);
printf("- ai[0]: %d\n", ai[0]);
printf("- ai[1]: %d\n", ai[1]);
printf("- ai[2]: %d\n", ai[2]);
printf("- pai: %p\n", pai);
printf("- *pai: %d\n", *pai);
printf("- rai: %p\n", rai);
printf("- rai[0]: %d\n", rai[0]);
printf("- *rai: %d\n", *rai);
printf("# ++pai: %p\n", ++pai);
printf("- ai: %p\n", ai);
printf("- ai[0]: %d\n", ai[0]);
printf("- ai[1]: %d\n", ai[1]);
printf("- ai[2]: %d\n", ai[2]);
printf("- pai: %p\n", pai);
printf("- *pai: %d\n", *pai);
printf("- rai: %p\n", rai);
printf("- rai[0]: %d\n", rai[0]);
printf("- *rai: %d\n", *rai);
printf("____ARRAY_END____\n");
// クラス
printf("____CLASS_BEGIN____\n");
int CClass:: *pj = &CClass:: i; // クラスメンバー変数へのポインター*pjへクラスメンバー変数iの(相対)アドレスを代入
void (CClass:: *pf)() = &CClass:: F; // クラスメンバー関数へのポインター*pfへクラスメンバー関数Fの(相対)アドレスを代入
CClass c; // クラス生成
CClass *pc = &c; // クラスポインター*pcへcのアドレスを代入
c.i = 1;
c.ai[0] = 100;
c.ai[1] = 200;
c.ai[2] = 300;
printf("# c.i = 1: %d\n", c.i = 1); // 直接メンバー変数へ代入
c.F(); // 直接メンバー関数を呼ぶ
printf("# c.*pj = 2: %d\n", c.*pj = 2); // 直接メンバー変数ポインターへ代入
(c.*pf)(); // 直接メンバー関数ポインターを呼ぶ
printf("# (*pc).i = 3: %d\n", (*pc).i = 3); // クラスポインター経由でメンバー変数へ代入
(*pc).F(); // クラスポインター経由でメンバー関数を呼ぶ
printf("# *pc.*pj = 4: %d\n", *pc.*pj = 4); // クラスポインター経由でメンバー変数ポインターへ代入
(*pc.*pf)(); // クラスポインター経由でメンバー関数ポインターを呼ぶ
printf("# pc->i = 5: %d\n", pc->i = 5); // クラスアドレス経由でメンバー変数へ代入
pc->F(); // クラスアドレス経由でメンバー関数を呼ぶ
printf("# pc->*pj = 6: %d\n", pc->*pj = 6); // クラスアドレス経由でメンバー変数ポインターへ代入
(pc->*pf)(); // クラスアドレス経由でメンバー関数ポインターを呼ぶ
printf("____CLASS_END____\n");
return 0;
}
実行結果
____VARIABLE_BEGIN____
- i: 1
- j: 1
- rk: 1
- pi: 0x7fff509c7864
- *pi: 1
# ++i: 2
- i: 2
- j: 1
- rk: 2
- pi: 0x7fff509c7864
- *pi: 2
# --j: 0
- i: 2
- j: 0
- rk: 2
- pi: 0x7fff509c7864
- *pi: 2
# ++rk: 3
- i: 3
- j: 0
- rk: 3
- pi: 0x7fff509c7864
- *pi: 3
# ++*pi: 4
- i: 4
- j: 0
- rk: 4
- pi: 0x7fff509c7864
- *pi: 4
____VARIABLE_END____
____ARRAY_BEGIN____
# ai[0] = 1001: 1001
- ai: 0x7fff509c786c
- ai[0]: 1001
- ai[1]: 2000
- ai[2]: 3000
- pai: 0x7fff509c786c
- *pai: 1001
- rai: 0x7fff509c786c
- rai[0]: 1001
- *rai: 1001
# ai[1] = 2001: 2001
- ai: 0x7fff509c786c
- ai[0]: 1001
- ai[1]: 2001
- ai[2]: 3000
- pai: 0x7fff509c786c
- *pai: 1001
- rai: 0x7fff509c786c
- rai[0]: 1001
- *rai: 1001
# ++pai: 0x7fff509c7870
- ai: 0x7fff509c786c
- ai[0]: 1001
- ai[1]: 2001
- ai[2]: 3000
- pai: 0x7fff509c7870
- *pai: 2001
- rai: 0x7fff509c786c
- rai[0]: 1001
- *rai: 1001
____ARRAY_END____
____CLASS_BEGIN____
# c.i = 1: 1
## F
- i:1
- ai:0x7fff509c781c
- *ai:100
- ai[0]:100
- ai[1]:200
- ai[2]:300
# c.*pj = 2: 2
## F
- i:2
- ai:0x7fff509c781c
- *ai:100
- ai[0]:100
- ai[1]:200
- ai[2]:300
# (*pc).i = 3: 3
## F
- i:3
- ai:0x7fff509c781c
- *ai:100
- ai[0]:100
- ai[1]:200
- ai[2]:300
# *pc.*pj = 4: 4
## F
- i:4
- ai:0x7fff509c781c
- *ai:100
- ai[0]:100
- ai[1]:200
- ai[2]:300
# pc->i = 5: 5
## F
- i:5
- ai:0x7fff509c781c
- *ai:100
- ai[0]:100
- ai[1]:200
- ai[2]:300
# pc->*pj = 6: 6
## F
- i:6
- ai:0x7fff509c781c
- *ai:100
- ai[0]:100
- ai[1]:200
- ai[2]:300
____CLASS_END____
なるほどわからん