title: Struct pointer (address), and default constructor
body: <p>Does taking address of a C# struct cause default constructor call?</p>
  
  <p>For example, I got such structs:</p>
  
  <pre><code>[StructLayout(LayoutKind.Sequential, Pack = 1)]
  public struct HEADER {
      public byte OPCODE;
      public byte LENGTH;
  }
  
  [StructLayout(LayoutKind.Sequential, Pack = 1)]
  public struct S {
      public HEADER Header;
      public int Value;
  }
  </code></pre>
  
  <p>Then, of course, I can't do this:</p>
  
  <pre><code>S s;                // no constructor call, so...
  var v = s.Value;    // compiler error: use of possibly unassigned field 'Value'
  </code></pre>
  
  <p>But once I obtain pointer to the struct, I can read its fields even without using the pointer, and even embedded struct's fields:</p>
  
  <pre><code>S s;
  S* ps = &amp;s;
  var v1 = ps-&gt;Value;        // OK, expected
  var v2 = s.Value;          // OK!
  var len = s.Header.LENGTH; // OK!
  </code></pre>
  
  <p>So, does it call the default constructor somehow, or - once I take the address - C# stops caring about the memory?</p>
  
  <p>PS: The memory seems to be zero-initialized anyway.</p>