In first case a variable will be create in memeory with the default base type value (depending upon compiler 2 compiler) bcoz it is not initialized. in second case the variable will be created in the memory with the value retuned by the function int() (if int is a user define function) the second statement should have been int *i = new int();
The 2nd statement is just fine. It call the default constructor for the data-type just as for classes. In the case of built-in types, the variable is initialized to zero.