Pointer address in a C multidimensional array
arrays, c, memory, multidimensional-array, pointers
Solution
When you declare a multidimensional array, the compiler treats it as a single dimensional array. Multidimensional arrays are just an abstraction to make our life easier. You have a misunderstanding: This isn't one array pointing to 4 arrays, its always just a single contigous block of memory.
In your case, doing:
int zippo[4][2]
Is really the same as doing
int zippo[8]
With the math required for the 2D addressing handled for you by the compiler.
For details, see this tutorial on Arrays in C++.
This is very different than doing:
int** zippo
or
int* zippo[4]
In this case, you're making an array of four pointers, which could be allocated to other arrays.
Problem
I'm messing around with multidimensional arrays and pointers. I've been looking at a program that prints out the contents of, and addresses of, a simple array. Here's my array declaration: ``` int zippo[4][2] = { {2,4}, {6,8}, {1,3}, {5,7} }; ``` My current understanding is that `zippo` is a pointer, and it can hold the address of a couple of other pointers. By default, `zippo` holds the address of pointer `zippo[0]`, and it can also hold the addresses of pointers `zippo[1]`, `zippo[2]`, and `zippo[3]`. Now, take the following statement: ``` printf("zippo[0] = %p\n", zippo[0]); printf(" *zippo = %p\n", *zippo); printf(" zippo = %p\n", zippo); ``` On my machine, that gives the following output: ``` zippo[0] = 0x7fff170e2230 *zippo = 0x7fff170e2230 zippo = 0x7fff170e2230 ``` I perfectly understand why `zippo[0]` and `*zippo` have the same value. They're both pointers, and they both store the address (by default) of the integer 2, or `zippo[0][0]`. But what is up with `zippo` also sharing the same memory address? Shouldn't `zippo` be storing the address of the pointer `zippo[0]`? Whaaaat?