<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vijay Nerkar</title>
    <description>The latest articles on DEV Community by Vijay Nerkar (@nerkarvijay).</description>
    <link>https://dev.to/nerkarvijay</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F418276%2F50c37596-b876-48d2-b987-9edc4f2d1244.jpeg</url>
      <title>DEV Community: Vijay Nerkar</title>
      <link>https://dev.to/nerkarvijay</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nerkarvijay"/>
    <language>en</language>
    <item>
      <title>How to read pointers</title>
      <dc:creator>Vijay Nerkar</dc:creator>
      <pubDate>Tue, 05 Apr 2022 06:47:31 +0000</pubDate>
      <link>https://dev.to/nerkarvijay/how-to-read-pointers-4800</link>
      <guid>https://dev.to/nerkarvijay/how-to-read-pointers-4800</guid>
      <description>&lt;p&gt;Hi all,&lt;br&gt;
This is my first post. Many peoples have problems on pointers.&lt;br&gt;
This post will help to understand pointers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;char a;&lt;br&gt;
Read : 'a' is a variable of char type.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;char *ptr;&lt;br&gt;
Read : 'ptr' is a pointer to char.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;char* ptr[5];&lt;br&gt;
Read : 'ptr' is an array of 5 pointers to a char. &lt;br&gt;
Note : The precedence rules say that the square brackets([]) are higher than the asterisk(*).&lt;br&gt;
Ex:&lt;br&gt;
int *ptr1 = NULL;&lt;br&gt;
int *ptr2 = NULL;&lt;br&gt;
int *ptr3 = NULL;&lt;br&gt;
int *ptr4 = NULL;&lt;br&gt;
int *ptr5 = NULL;&lt;br&gt;
char *ptr[5] = {ptr1, ptr2, ptr3, ptr4, ptr5};&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;int ** ptr2;&lt;br&gt;
Read : 'ptr2' is a pointer to pointer to int&lt;br&gt;
Ex:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;int a = 4;&lt;br&gt;
  int *ptr1 = &amp;amp;a;&lt;br&gt;
  int **ptr2 = &amp;amp;ptr1;&lt;/p&gt;

&lt;p&gt;cout &amp;lt;&amp;lt; "\n a : " &amp;lt;&amp;lt; a;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n Address of a : " &amp;lt;&amp;lt; &amp;amp;a;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n ptr1 : " &amp;lt;&amp;lt; ptr1;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n *ptr1 : " &amp;lt;&amp;lt; *ptr1;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n ptr2 : " &amp;lt;&amp;lt; ptr2;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n *ptr2 : " &amp;lt;&amp;lt; *ptr2;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n **ptr2 : " &amp;lt;&amp;lt; **ptr2;&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;a : 4&lt;br&gt;
   Address of a : 0040F8D0&lt;br&gt;
   ptr1 : 0040F8D0&lt;br&gt;
   *ptr1 : 4&lt;br&gt;
   ptr2 : 0040F8C4&lt;br&gt;
   *ptr2 : 0040F8D0&lt;br&gt;
   **ptr2 : 4&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; const int *ptr;
Read : 'ptr' is a pointer to const int
Ex:
const int a = 4;
const int *ptr = &amp;amp;a;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cout &amp;lt;&amp;lt; "\n a : " &amp;lt;&amp;lt; a;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n Address of a : " &amp;lt;&amp;lt; &amp;amp;a;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n ptr : " &amp;lt;&amp;lt; ptr;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n *ptr : " &amp;lt;&amp;lt; *ptr;&lt;/p&gt;

&lt;p&gt;Output:&lt;br&gt;&lt;br&gt;
   a : 4&lt;br&gt;
   Address of a : 0040F8D0&lt;br&gt;
   ptr : 0040F8D0&lt;br&gt;
   *ptr : 4&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; const int **ptr2;
Read : 'ptr2' is a pointer to pointer to const int
Ex:
const int a = 4;
const int *ptr1 = &amp;amp;a;
const int **ptr2 = &amp;amp;ptr1;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cout &amp;lt;&amp;lt; "\n a : " &amp;lt;&amp;lt; a;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n Address of a : " &amp;lt;&amp;lt; &amp;amp;a;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n ptr1 : " &amp;lt;&amp;lt; ptr1;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n *ptr1 : " &amp;lt;&amp;lt; *ptr1;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n ptr2 : " &amp;lt;&amp;lt; ptr2;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n *ptr2 : " &amp;lt;&amp;lt; *ptr2;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n **ptr2 : " &amp;lt;&amp;lt; **ptr2;&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;a : 4&lt;br&gt;
   Address of a : 0040F8D0&lt;br&gt;
   ptr1 : 0040F8D0&lt;br&gt;
   *ptr1 : 4&lt;br&gt;
   ptr2 : 0040F8C4&lt;br&gt;
   *ptr2 : 0040F8D0&lt;br&gt;
   **ptr2 : 4&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;char * const * ptr2;
Read : ptr2 is a pointer to const pointer to char
Ex:
char  a = 'x';
char *const ptr1 = &amp;amp;a;
char * const * ptr2 = &amp;amp;ptr1;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cout &amp;lt;&amp;lt; "\n a : " &amp;lt;&amp;lt; a;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n Address of a : " &amp;lt;&amp;lt; &amp;amp;a;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n ptr1 : " &amp;lt;&amp;lt; ptr1;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n *ptr1 : " &amp;lt;&amp;lt; *ptr1;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n ptr2 : " &amp;lt;&amp;lt; ptr2;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n *ptr2 : " &amp;lt;&amp;lt; *ptr2;&lt;br&gt;
  cout &amp;lt;&amp;lt; "\n **ptr2 : " &amp;lt;&amp;lt; **ptr2;&lt;/p&gt;

&lt;p&gt;Output:&lt;br&gt;&lt;br&gt;
   a : x&lt;br&gt;
   Address of a : 0040F8D0&lt;br&gt;
   ptr1 : 0040F8D0&lt;br&gt;
   *ptr1 : x&lt;br&gt;
   ptr2 : 0040F8C4&lt;br&gt;
   *ptr2 : 0040F8D0&lt;br&gt;
   **ptr2 : x&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;const int * const * ptr2;
Read : ptr2 is a pointer to const pointer to const int
Ex:
const int  a = 10;
const int * ptr1 = &amp;amp;a;
const int * const * ptr2 = &amp;amp;ptr1;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;printf("\n a : %d ", a);&lt;br&gt;
  printf("\n Address of a : %d ", &amp;amp;a);&lt;br&gt;
  printf("\n ptr1 : %d ", ptr1);&lt;br&gt;
  printf("\n &lt;em&gt;ptr1 : %d ",&lt;/em&gt; ptr1);&lt;br&gt;
  printf("\n ptr2 : %d ", ptr2);&lt;br&gt;
  printf("\n *ptr2 : %d ", *ptr2);&lt;br&gt;
  printf("\n **ptr2 : %d ", **ptr2);&lt;/p&gt;

&lt;p&gt;Output : &lt;br&gt;
   a : 10&lt;br&gt;
   Address of a : 4456124&lt;br&gt;
   ptr1 : 4456124&lt;br&gt;
   *ptr1 : 10&lt;br&gt;
   ptr2 : 4456112&lt;br&gt;
   *ptr2 : 4456124&lt;br&gt;
   **ptr2 : 10&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;int ** const ptr2;
Read : ptr2 is a const pointer to pointer to int
Ex:
int  a = 10;
int * ptr1 = &amp;amp;a;
int ** const  ptr2 = &amp;amp;ptr1;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;printf("\n a : %d ", a);&lt;br&gt;
  printf("\n Address of a : %d ", &amp;amp;a);&lt;br&gt;
  printf("\n ptr1 : %d ", ptr1);&lt;br&gt;
  printf("\n &lt;em&gt;ptr1 : %d ",&lt;/em&gt; ptr1);&lt;br&gt;
  printf("\n ptr2 : %d ", ptr2);&lt;br&gt;
  printf("\n *ptr2 : %d ", *ptr2);&lt;br&gt;
  printf("\n **ptr2 : %d ", **ptr2);&lt;/p&gt;

&lt;p&gt;Output :&lt;br&gt;
   a : 10&lt;br&gt;
   Address of a : 4456124&lt;br&gt;
   ptr1 : 4456124&lt;br&gt;
   *ptr1 : 10&lt;br&gt;
   ptr2 : 4456112&lt;br&gt;
   *ptr2 : 4456124&lt;br&gt;
   **ptr2 : 10&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;const int ** const ptr2;
Read : ptr2 is a const pointer to pointer to const int
Ex:
const int  a = 10;
int * ptr1 = &amp;amp;a;
const int ** const  ptr2 = &amp;amp;ptr1;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;printf("\n a : %d ", a);&lt;br&gt;
  printf("\n Address of a : %d ", &amp;amp;a);&lt;br&gt;
  printf("\n ptr1 : %d ", ptr1);&lt;br&gt;
  printf("\n &lt;em&gt;ptr1 : %d ",&lt;/em&gt; ptr1);&lt;br&gt;
  printf("\n ptr2 : %d ", ptr2);&lt;br&gt;
  printf("\n *ptr2 : %d ", *ptr2);&lt;br&gt;
  printf("\n **ptr2 : %d ", **ptr2);&lt;/p&gt;

&lt;p&gt;Output :&lt;br&gt;
   a : 10&lt;br&gt;
   Address of a : 4456124&lt;br&gt;
   ptr1 : 4456124&lt;br&gt;
   *ptr1 : 10&lt;br&gt;
   ptr2 : 4456112&lt;br&gt;
   *ptr2 : 4456124&lt;br&gt;
   **ptr2 : 10&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;int * const * const ptr2;
Read : ptr2 is a const pointer to const pointer to int
Ex:
int  a = 10;
const int * ptr1 = &amp;amp;a;
int * const * const ptr2 = &amp;amp;ptr1;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;printf("\n a : %d ", a);&lt;br&gt;
  printf("\n Address of a : %d ", &amp;amp;a);&lt;br&gt;
  printf("\n ptr1 : %d ", ptr1);&lt;br&gt;
  printf("\n &lt;em&gt;ptr1 : %d ",&lt;/em&gt; ptr1);&lt;br&gt;
  printf("\n ptr2 : %d ", ptr2);&lt;br&gt;
  printf("\n *ptr2 : %d ", *ptr2);&lt;br&gt;
  printf("\n **ptr2 : %d ", **ptr2);&lt;/p&gt;

&lt;p&gt;Output :&lt;br&gt;
   a : 10&lt;br&gt;
   Address of a : 4456124&lt;br&gt;
   ptr1 : 4456124&lt;br&gt;
   *ptr1 : 10&lt;br&gt;
   ptr2 : 4456112&lt;br&gt;
   *ptr2 : 4456124&lt;br&gt;
   **ptr2 : 10&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;const int * const * const ptr2;
Read : ptr2 is a const pointer to const pointer to const int
Ex :
const int  a = 10;
const int * ptr1 = &amp;amp;a;
const int * const * const ptr2 = &amp;amp;ptr1;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;printf("\n a : %d ", a);&lt;br&gt;
  printf("\n Address of a : %d ", &amp;amp;a);&lt;br&gt;
  printf("\n ptr1 : %d ", ptr1);&lt;br&gt;
  printf("\n &lt;em&gt;ptr1 : %d ",&lt;/em&gt; ptr1);&lt;br&gt;
  printf("\n ptr2 : %d ", ptr2);&lt;br&gt;
  printf("\n *ptr2 : %d ", *ptr2);&lt;br&gt;
  printf("\n **ptr2 : %d ", **ptr2);&lt;/p&gt;

&lt;p&gt;Output :&lt;br&gt;
   a : 10&lt;br&gt;
   Address of a : 4456124&lt;br&gt;
   ptr1 : 4456124&lt;br&gt;
   *ptr1 : 10&lt;br&gt;
   ptr2 : 4456112&lt;br&gt;
   *ptr2 : 4456124&lt;br&gt;
   **ptr2 : 10&lt;/p&gt;

&lt;p&gt;Pointer Arithmatic :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;// i is a integer constant which contains value 10
const int i=10;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;// ptr is a pointer to integer constant&lt;br&gt;
  const int *ptr = &amp;amp;i; &lt;/p&gt;

&lt;p&gt;(*ptr)++;//error&lt;br&gt;
  Because trying to modify value of i but i is a const variable.&lt;/p&gt;

&lt;p&gt;ptr++;//allowed&lt;br&gt;
  Here we incrementing address pointer by ptr by 1. Means suppose address of a is  100.&lt;br&gt;
                Now ptr contains 100(address of i)&lt;br&gt;
  ptr++ just incrementing 100 to 104. Now if we print value at address 104 ,&lt;br&gt;
                it will be print some garbage value.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;// arr is an array of six integers out of which three are initialized
int arr[6]={1,2,3};
// ptr is a pointer to integer which pointing at base address of array arr
int *ptr = arr;
ptr++;//allowed
(*ptr)++;//allowed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ex:&lt;br&gt;
         int arr[6] = {11,22,33};&lt;br&gt;
         int *ptr = arr;&lt;br&gt;
         printf("\n *ptr : %d ", *ptr);&lt;br&gt;
         ptr++;&lt;br&gt;
         printf("\n *ptr : %d ", *ptr);&lt;br&gt;
        (*ptr)++;&lt;br&gt;
        printf("\n *ptr : %d ", *ptr);&lt;/p&gt;

&lt;p&gt;Output:&lt;br&gt;
        *ptr : 11&lt;br&gt;
        *ptr : 22&lt;br&gt;
        *ptr : 23&lt;/p&gt;

&lt;p&gt;3.// arr is an array of three integer constant&lt;br&gt;
     int const arr[3]={1,2,3};&lt;/p&gt;

&lt;p&gt;// ptr1 is a pointer to integer which pointing at base address of array arr&lt;br&gt;
      int *ptr1 = arr;&lt;br&gt;
      ptr1++;//allowed&lt;br&gt;
      (*ptr1)++;//allowed&lt;br&gt;
      (arr[2])++;//error&lt;/p&gt;

&lt;p&gt;Ex: &lt;br&gt;
  int arr[] = {12,33,50};&lt;br&gt;
  int *ptr1 = arr;&lt;br&gt;
  int  i = 0;&lt;/p&gt;

&lt;p&gt;for (i = 0; i &amp;lt; 3; i++)&lt;br&gt;
  {&lt;br&gt;
   printf("\nArr[%d] : %d", i,arr[i]);&lt;br&gt;
  }&lt;br&gt;&lt;br&gt;
  printf("\n &lt;em&gt;ptr1 : %d ", *ptr1);&lt;br&gt;
  ptr1++; &lt;br&gt;
  printf("\n *ptr1 : %d ",&lt;/em&gt; ptr1);&lt;br&gt;
  arr[1]++;&lt;br&gt;
  printf("\n arr[1] : %d ",arr[1]);&lt;/p&gt;

&lt;p&gt;Output:&lt;br&gt;
  Arr[0] : 12&lt;br&gt;
  Arr[1] : 33&lt;br&gt;
  Arr[2] : 50&lt;br&gt;&lt;br&gt;
  *ptr1 : 12&lt;br&gt;
  *ptr1 : 33&lt;br&gt;
  arr[1] : 34&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
  </channel>
</rss>
