You can't pass uninitialized variables to a function. In your second example, you're not passing it to a function. You're directly assigning to the variable. I'll write you an easy example to explain what I mean.
1 2 3 4 5 6 7 8 9 10 11 12
int ReturnIt(int x) //this is passing it by value, the value is garbage
{
return x; //returns garbage
}
int main()
{
int i; //i is unitialized (aka there's nothing but garbage inside of it)
ReturnIt(i); //passing i (garbage) to the function
}
EDIT
I take that back. You can pass the address of an uninitialized variable or reference to it.