title: Strange (for me) behavior of pointers
body: <p>I'm reading about pointers, but i'm confused about their nature. Here is what I mean.</p>
  
  <pre><code>int x = 4;
  
  //Here I declare p as integer pointer
  int *p;
  
  // Here I assign memory address of x to pointer p
  p = &amp;x;
  
  // The line below prints result 4 which is expected. If I miss asterisk before p I'll get memory address instead of data which that memory address holds.
  printf("%d", *p)
  </code></pre>
  
  <p>Summarizing when asterisk is mising before pointer it "points" to memory address. If asterisk preceded pointer it "points" to actual data.
  So far so good.</p>
  
  <p>But why that segment of code works correctly ?</p>
  
  <pre><code>int someIntVariable = 10;
  
  const int *p = &amp;someIntVariable;
  printf("%d", *p);
  </code></pre>
  
  <p>If I miss asterisk the compiler gives me an warning " warning: initialization makes integer from pointer without a cast"</p>
  
  <p>I expected p (if the compiler allows me to use p without asterisk) to hold memory address of someIntVariable instead of it's "value";</p>
  
  <p>What is happening here ?</p>