What's the difference between a wallet and an address? Bitcoin seems to have the concept of a wallet and an address. Are they the same thing? If not, how do they differ?
Addresses are public-key hashes of an asymmetric key pair
An address represents a hash of a public key of an asymmetric key pair.¹ The owner of the key pair can use the private key to sign transactions or messages (for example in order to prove ownership). Only by using the correct private key a valid signature may be created, which then anyone can verify as valid by using the associated address (which, again, represents the public key).
Wallets are an abstract concept, a &quot;keyring&quot;
A wallet is an abstract construct, which contains the set of public and private key pairs randomly generated for the user. In a deterministic wallet, the keys are derived from a passphrase (a specific seed, masterkey or password) instead of a random seed. Essentially, it corresponds to a keyring in the cryptographic sense.
The Bitcoin client software abstracts the wallet for the user such that it checks each of the addresses contained in the wallet, whether there are any balances (transaction outputs) associated in the blockchain with them. It sums the funds up and presents them as a single total balance. Underlying, however, these balances are stored publicly in the blockchain (that's right, the wallet doesn't contain your coins, it just allows you to spend them). They are split up to numerous addresses and transaction outputs:


Address #15521² has
3 BTC in transaction output 1
Address #23414 has
1.2 BTC in transaction output 1
0.7 BTC in transaction output 2
...


Everyone can see them, however, usually can't determine the identity of the owner.

¹ To be more accurate an address is a Base58-encoded hash of the public key.
² Of course, real addresses actually are alphanumeric strings with up to 34 characters.