C言語の特徴であるポインタですが、ポインタには「ポインタのポインタ」というものがあります。
「ポインタのポインタ」は「ポインタ」のアドレスを持っているだけなので、要は単純に連鎖しているだけです。
ということは、「ポインタのポインタのポインタ」もできるわけです。
なので今回は、「ポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタ」、名付けて10連ポインタを使ってみました。
※「ポインタ」連呼ですみません。
僕のプロフィールはこちら
目次
ソースコード
■GitHub
URL:「https://github.com/izumin0401/c-lang/blob/master/pointer_pointer.c」
↑に格納しています。参考までに。
ポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <stdio.h> int main(void) { int num = 1; int *num_p; int **num_pp; int ***num_ppp; int ****num_pppp; int *****num_ppppp; int ******num_pppppp; int *******num_ppppppp; int ********num_pppppppp; int *********num_ppppppppp; int **********num_pppppppppp; num_p = # num_pp = &num_p; num_ppp = &num_pp; num_pppp = &num_ppp; num_ppppp = &num_pppp; num_pppppp = &num_ppppp; num_ppppppp = &num_pppppp; num_pppppppp = &num_ppppppp; num_ppppppppp = &num_pppppppp; num_pppppppppp = &num_ppppppppp; **********num_pppppppppp = 9; printf("num = %d\n", num); printf("*num_p = %d\n", *num_p); printf("**num_pp = %d\n", **num_pp); printf("***num_ppp = %d\n", ***num_ppp); printf("****num_pppp = %d\n", ****num_pppp); printf("*****num_ppppp = %d\n", *****num_ppppp); printf("******num_pppppp = %d\n", ******num_pppppp); printf("*******num_ppppppp = %d\n", *******num_ppppppp); printf("********num_pppppppp = %d\n", ********num_pppppppp); printf("*********num_ppppppppp = %d\n", *********num_ppppppppp); printf("**********num_pppppppppp = %d\n", **********num_pppppppppp); return 0; } |
「ポインタのポインタ」ができるなら後は増やしていくだけなので意外と簡単です。
最初に「num」に「1」を代入していますが、「**********num_pppppppppp = 9;」でアドレスを辿って、最終的に「num」に「9」が代入されることになります。
ポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタを実行してみる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Running /home/ec2-user/environment/pointer_pointer.c num = 9 *num_p = 9 **num_pp = 9 ***num_ppp = 9 ****num_pppp = 9 *****num_ppppp = 9 ******num_pppppp = 9 *******num_ppppppp = 9 ********num_pppppppp = 9 *********num_ppppppppp = 9 **********num_pppppppppp = 9 Process exited with code: 0 |
すべて「9」ですね。
それだけ。
まとめ
まあ、こんなコードの書き方して何の得もしないんですが、できるってことが分かって良かったんじゃないですかね。
業務でC言語を使っている人は、どうか10連ポインタを使って皆を困らせましょう。
ではさいなら。