Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: c/c++
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*ptr)[4]=a;
what do ptr and *ptr mean in this context? Why ptr and *ptr point to the same meory address
Posted 21-Apr-13 5:29am

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

ptr is a variable, in this case it is declared as a pointer to an array of 4 integers.
 
To read the declaration, start with the name of the variable (ptr in this case) and work out, going right when possible:
int (*ptr)[4]=a;
      ptr
 
"ptr is..."
We can't go right because we need a matching bracket first, so we go left
int (*ptr)[4]=a;
    (*ptr)
 
"ptr is a pointer to..."
Now we have closed the brackets so we can go right again:
int (*ptr)[4]=a;
    (*ptr)[4]
 
"ptr is a pointer to an array of four...
The equals ends teh declaration, so we have to go left again
int (*ptr)[4]=a;
int (*ptr)[4]=a;
 
"ptr is a pointer to an array of integers"
And the rest of teh line assigns a suitable value.
 
So when you use ptr later in your code, you are referring to the instance of an array of three arrays of four integers.
When you refer to *ptr in your code you are referring to one of the arrays of four integers, because the "*" dereferences the pointer.
 

Did that make sense?
  Permalink  
Comments
CPallini at 21-Apr-13 11:56am
   
Yes, it did.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 365
1 Sergey Alexandrovich Kryukov 329
2 CPallini 270
3 Afzaal Ahmad Zeeshan 204
4 DamithSL 194
0 OriginalGriff 5,515
1 DamithSL 4,451
2 Maciej Los 3,902
3 Kornfeld Eliyahu Peter 3,480
4 Sergey Alexandrovich Kryukov 3,175


Advertise | Privacy | Mobile
Web01 | 2.8.141216.1 | Last Updated 21 Apr 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100