C言語のポインタってこんなことできるんだよという大人気ないこのコードを披露する機会は一生やってこないと思ったのでここに残しておく。
ちなみに、後から気づいたのだが ANSI C, Cxx などの規格的にやってはいけないことをやっている。
少なくとも 2_code, 2B_code で禁忌を侵している。(インクリメント・デクリメントした変数を同じ式内でポインタを介して再参照してはならなかったはず)
他にも何かを踏み抜いているかもしれない。
以上 2022/8/25 に追記
1_code
#include <stdio.h> main() { void *a[2]; void ****************************************************************************************************************************p; void *que; p = (void *)a; a[1] = p; que = p[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1] [1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1] [1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1] [1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1]; printf("%p\n%p\n%p\n%p\n", a, a[1], p, que); }
1_output
004FF860 004FF860 004FF860 004FF860
2_code
#include <stdio.h> main() { void *a[2]; void ****p; p = (void *)a; a[0] = p; a[1] = p; ++*++*p++; --*--*p--; ++*++*p++; --*--*p--; ++*++*p++; --*--*p--; ++*++*p++; --*--*p--; printf("%p\n%p\n%p\n%p\n", a, a[0], a[1], p); }
2_output
00D3F814 00D3F814 00D3F814 00D3F814
2B_code
https://paiza.io/projects/mRjXl_AEsvaXmI0imKoLWw (paiza.IO)
#include <stdio.h> main() { void *a[2]; void ******************************************************************************************************************************** ********************************************************************************************************************************p; void *q; p = (void *)a; a[0] = p; a[1] = p; q = *++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*-- *++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*-- *++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*-- *++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*-- *++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*-- *++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*-- *++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*-- *++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*--*--*++*++*p++; printf("%p\n%p\n%p\n%p\n%p\n", a + 1, a[0], a[1], p, q); }
2B_output
0x7ffc6fd1fe88 0x7ffc6fd1fe88 0x7ffc6fd1fe88 0x7ffc6fd1fe88 0x7ffc6fd1fe88
3_code
#include <stdio.h> static void *f() { return f; } main() { void *(*(*(*(*(*(*(*(*(*( *(*(*(*(*(*(*(*(*(*( *(*(*(*(*(*(*(*(*(*( *(*(*(*(*(*(*(*(*(*( *(*(*(*(*(*(*(*(*(*(*p)())())())())())())())())())() )())())())())())())())())())() )())())())())())())())())())() )())())())())())())())())())() )())())())())())())())())())(); void *q; p = (void *)f; q = p()()()()()()()()()() ()()()()()()()()()() ()()()()()()()()()() ()()()()()()()()()() ()()()()()()()()()(); printf("%p\n%p\n%p\n", f, p, q); }
3_output
00C21000 00C21000 00C21000