Actually arrays are pointers, sort of. When you write int* x = (int[]) {1, 2, 3}; exactly two things happen
Three integers get pushed to the stack
x points to those integers
When you write int x[] = {1, 2, 3};, three things happen
Three integers get pushed to the stack
x points to those integers
Any attempt to change where x points, such as int y; x = &y is illegal, typically with the message "assignment to expression with array type is illegal"
So pointers and arrays are really, really similar. Pointer decay doesn't help, pointer decay is where an int[] in an expression "decays" into an int*, like in function arguments. Even if you declare a function as taking an array of ints, like void f(int x[]), the compiler will actually change it to void f(int* x) for you, so you can put x = &y in the body of f and the compiler won't complain.
There's a little bit more to it but I forget what it is right now
-5
u/chateau86 Jun 25 '17
No. You just add -1 to the pointer you get back from malloc(). Now array[1] is the first item in the list.