I use C, commericaly since 1991. This is where I record what I know about allocating and managing 2D/1D arrays in C. And I keep on revisiting this doc and clarifying it ever more. Many times I cought myself re-discovering what I have stored in here. Please do not repeat the same mistake.
Short answer is this:
+ -- int (*arp)[2][3] // 2D array pointer
V
+------------- int arr[2][3] -----------+