title: use printf("%s",..) to print a struct, the struct's first variable type is 'char *', why can get a right string stored in 'char *'?
body: <p>In C language,define a struct like this：
  　　　　</p>
  
  <pre><code>typedef struct str
  {
      char *s;
      int len;
  }str;
  
  
  int main()
  {
      str a;
      a.s = "abc"
      printf("%s", a);
      return 0;
  }
  </code></pre>
  
  <p>the output is: "abc",  I want to konw why can get this?<br>
  I guess the complier think <code>printf("%s", a)</code> as <code>printf("%s", *&amp;a)</code>  because &amp;a is equal to &amp;a.s, so *&amp;a is equal to *&amp;a.s, right?</p>
  
  <p>but if so, if I put the <code>int len</code> at the first in the struct body like this:</p>
  
  <pre><code>typedef struct str
  {
      int len;
      char *s;
  }str;
  int main()
  {
      str a;
      a.len = 10;
      printf("%d", a);
  }
  </code></pre>
  
  <p>this time the output is: 10,  why?<br>
  Maybe compiler read %d so it knows that should print a integer value, only print 4 bytes? 
  I want to get some explain about it.</p>