Some questions about null reference checking by the CLR in C#

Consider this:

```
class CS
{
  public int X;
}

void Foo(CS c)
{
  c.X += 10;
}

CS c = default(CS);

Foo(c);

```

obviously a NullReferenceException is thrown here.

Now CS becomes a struct

```
struct CS { public int X; }

CS c = default(CS);

Foo(c);

```

Now no exception is thrown

Then Foo is changed into taking a ref CS cs argument.

```
void Foo(ref CS c) { c.X += 10; }

```

Again no exception since CS is still a struct.

Now the questions.

1. Does the CLR generate an "if (x == null)" statement for every field reference of class objects or how does it do that?
2. Does the CLR do the same for ref arguments when the argument is a struct?
3. Is it possible to get null for the CS argument when CS is a struct?