+ 4

Array pointer

I have pointer like that Int arr[] ={1,2,3}; Int *p; p = arr; Cout <<p<<endl; My question is. Why when im trying to show first element of array I get address of this array of course I can do it like that Cout <<p[0]; but here I get value 1 but in cout <<p; I get the address of the first element What is the difference between it ? And why I'm getting adress not value ? After all, the name of the array should point to the first element p is pointing to first element but what's difference between p and p[0]

28th Jul 2020, 10:15 PM
Virozz
Virozz - avatar
4 Answers
+ 6
If you cout p, you are showing the address that's stored in that pointer. If you cout *p, you are accessing the value stored at that address. The difference between arr and arr[0] is the same. You could also write *arr (getting the first element) or *(arr+i) (getting the element at that index.
28th Jul 2020, 10:22 PM
HonFu
HonFu - avatar
+ 3
What I think is Virozz ,p is a variable that is containing address of the array now ,and when you do p[0] it actually refers to the 0th index of array since it is pointing to the array similarly like arr is pointing to the array and gives you same value for arr[0]
28th Jul 2020, 11:54 PM
Abhay
Abhay - avatar
+ 2
But how it's doing that p is storing adress but p[0] is already storing first element
28th Jul 2020, 10:29 PM
Virozz
Virozz - avatar
+ 2
Virozz "p" is pointing to the first element of the array "arr". You should note that you have created only one pointer (that is 'p' ) which is traversing the array to access it's elements. so just like Abhay and HonFu already explained :- p[n] is same as *(p + n) So p[0] can be considered as *(p + 0) which is initial address of 'p'.
29th Jul 2020, 4:49 AM
Arsenic
Arsenic - avatar