Blocking and Nonblocking statements in same procedural block
You have given c a default value of 1, but then at time 0 assign it to be equal to b (blocking). So the simulation copies  the value of b to c before sequentially moving on to perform a &lt;= b.

What you have written is essentially:

module block;
  reg a;
  reg b = 1'b0;
  reg c;

  initial begin
    c  = b;
    a &lt;= b;
  end

endmodule