Everyone always trots this out when talking about multidimensional array programming in C, but it's effectively useless because it only works for statically declared, fixed-size arrays. Since those never occur when writing real numerical code, the fact that the compiler in this one very particular case can turn x[i][j] into x[i*s+j] for me is essentially useless for any real work with dynamically allocated, variably sized multidimensional arrays.
In which case the correct statement would have been something like "Multidimensional arrays in C are not very useful in practice," rather than "they don't exist".
An array of arrays is contiguous in memory. There are no pointers involved until you take the (r)value of the array or one of the inner arrays, at which point it is degraded to be a pointer to the array's first element, as always.
Where hello_hi might have gotten confused is that in usage, a pointer of array pointers looks the same as a 2D array. So if you only see x[a][b] it could actually be dereferencing an array of pointers to integers.
Since we have the declaration, it's unambiguously the 2D array that you described.
EDIT: I might be seeing things, but I think you have your order mixed up, x[a][b] is not x_1d[a + 83b], but rather x_1d[a83+b]