### 2D array represented in 1D

hi, i know this has been asked before, but i cannot understand why pointers are printed, instead of values... I'm considering a 2d array as a 1d array... where i would expect the element a[i][j] to become a[i*number_columns + j]... but instead of the values of the array, their pointers are given as result. any help appreciated. thanks

 ``12345678910111213`` ``````#include int main() { int arr[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}; std::cout << arr[2][4] << std::endl; // fine, prints 15 std::cout << arr << std::endl; // fine , prints pointer to initial element of the array for (int i=0;i!=3*5;i++) std::cout << arr[i] << std::endl; // prints pointers instead of values....starting from pointer arr, then arr+1, arr+2... return 0; }``````
arr is an array of 3 pointers arrays.
each of those 3 pointers points to arrays is an array of 5 ints.
Last edited on
thanks kevinkjt2000
 arr is an array of 3 pointers

That is wrong: `arr` is an array of 3 arrays, each of which is an array of 5 ints.

However, there is no `operator<<` for arrays, but there is `operator<<` for pointers, so when you pass `arr[i]` (array of 5 ints) to `cout <<`, the compiler constructs a temporary pointer to its first element, and that is what's printed.
Cubbi did you just contradict yourself?
 There is no `operator <<` for arrays
, but there is a pointer constructed when you pass `arr[i]`?
http://www.cplusplus.com/forum/articles/10/

So to be precise arr is an array of arrays that typecasts automatically to a pointer if placed in such a situation.
Last edited on
 So to be precise arr is an array of 3 const int pointer

No, this is wrong. There are no pointers in arr.

 there is a pointer constructed when you pass arr[i]?

Yes, it is the same as with any type mismatch, for example if you have a double, you can pass it into a function that expects an int.
Thanks Cubbi, you are right. I went and learned a lot about types and in that article I linked to the second post has code that did not compile when I tried it for myself.

I would really enjoy reading a nice article on this subject if someone would be kind of enough to send me a link. I'm still confused on whether or not arrays are const pointer because they behave exactly like a const pointer if put in such a situation. Such as,
 ``12`` ``````int arr[3][5]; *(*(arr + 1) +3) = 800;``````
Topic archived. No new replies allowed.