This probably sounds like a previously asked question - there are a bunch of questions out there about the difference between arrays and pointers in C, but none of them provide quite enough information to answer this question.
I know that the name of a C array is treated by the C compiler like a pointer to the start of the memory block, but when I try to assign the name of a 3 x 3 2D array of ints to an int ** in my CLION IDE, it highlights the assignment and says:
Incompatible pointer types 'int * *' and 'int [3][3]'
int x[3][3];
int **px = x; <-- warning here
I can cast the assigned value to (int**) and the highlight goes away of course, but - hey - you can cast a helluva lot of stuff in C and get highlights to go away. Doesn't mean what you're asking for is going to work.
Is this just a CLION (or, probably more appropriately, clang tidy) problem, or is a real issue?
[edit]
For some context, the problem with all the other answers on array/pointer differences is that many of them say things like "because an 3x3 array is not a int **, that's why!" Thanks, but that's a fairly useless piece of information - the person asking the question likely already knows a 3x3 array is not an int ** - the question is how does the compiler treat the resulting int ** after the assignment - will it properly index the array or not?