Defining a variable allocates memory for it, and if written such, initializes it.
Declaring a variable merely makes an identifier for something of some type but no memory is set aside.
The difference doesn't come up often in code, because declarations are usually definitions at the same time, but one example goes like this:
Code:
extern type foo;
type foo;
While type foo; can only appear in one source file, the extern line is probably in many files, including the one that defines foo. The extern line is a declaration, but not a definition.
edit - beaten to it.