In your first example, the code doesn't work because local variables have to be initialized before you can use them. There is no "default" value; they must be initialized first. You always have to initialize every local variable before you can use it. For example:
EmpStruct empStruct = new EmpStruct();
empStruct.FirstNumber = 5;
Fields in a class don't have this same restriction. If you don't explicitly initialize them, they will be automatically initialized with default values. In effect, the runtime is automatically calling "new EmpStruct()" on the field in your class. That's why your second example works.