There are 3 main memory types in programming: static memory, heap and stack.
Static memory is used to allocate all 'static' variables, i.e. variables declared in global scope or declared as static in functions. This means that the number of static variables and their size is known at compilation time and compiler just reserves memory for them.
Heap is a dynamic memory pool where you can borrow memory when you need it and return the memory to it. So, when you borrow memory, i.e. 'malloc' it, you can use it as you wish till you return (free) it so that it could be reused by a different piece of the program.
The stack is a special memory region, used to allocate local variables for functions. When you call a function which has non-static local variables, it will allocate enough space for those variables in the memory (plus additional space needed for the function's needs). When you return from the function, the memory gets automatically return to the system for reuse in another function call.
In your case, the first declaration could either be a static variable or could be a local function variable. Depending on this it could be allocated in one of those pools. The second case borrows memory from heap.
Usually every single variable occupies contiguous space in memory. It does not matter which type of the memory it is. Array is such a variable which occupies a memory region. The order in which data is put in memory itself depends on architecture. The task of the compiler is to give you a standard view of the variables, i.e. array[0] should contain data for array[0] and pointer arithmetic should work in the standard way.
So, in practice all elements of an array are stored sequentially. If not, it will not alter anything in the programming. Though I have not seen a case where they would not be as such.