title: confusion with dereferencing argv
body: <p>I have this small program:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;string.h&gt;
  
  int main(int argc, char* argv[]) {
     printf("argv[1] -&gt; %s\n", argv[1]); 
  }
  </code></pre>
  
  <p>Which I analyzed in <code>gdb</code> with the following commands:</p>
  
  <pre><code>$ gdb -q  --args foo hello
  Reading symbols from foo...
  (gdb) break main
  Breakpoint 1 at 0x1148: file foo.c, line 5.
  (gdb) run
  Starting program: /tmp/foo/foo hello
  
  Breakpoint 1, main (argc=2, argv=0x7fffffffea68) at foo.c:5
  5          printf("argv[1] -&gt; %s\n", argv[1]);
  (gdb) print argv@2
  $1 = {0x7fffffffea68, 0x200000000}
  (gdb) print *argv@2
  $2 = {0x7fffffffecd8 "/tmp/foo/foo", 0x7fffffffece5 "hello"}
  </code></pre>
  
  <p>I don't understand how <code>argv[1]</code> can yield the string <code>"hello"</code> when the content of <code>argv[1]</code> is 
  <code>0x200000000</code> and not <code>0x7fffffffece5</code> which is the actual address of the string <code>"hello"</code>.</p>