An address is used to receive bitcoin and is represented as a string of letters and numbers. Public keys and addresses are often conflated. An address is usually a hash of a public key, and at present, addresses, not public keys are used to directly receive bitcoin. On a technical level, an address can represent more than just the hash of a public key.
A Bitcoin wallet allows users to generate as many addresses as they require. Wallets also allow users to send bitcoin to a provided address. When bitcoin is sent to an address, only the owner of the private key(s) which derived that address is capable of spending the bitcoin.
On a technical level, an address can represent several different scripts. Addresses are encoded and prefixed in order to convey their script type. Legacy addresses use Base58, and when a legacy address is the hash of a public key, a so-called P2PKH address, it begins with a ‘1’. Less frequently, a legacy address is a hash of a script, in which case it will begin with a ‘3’. Currently, all SegWit addresses are encoded in Bech32 and begin with the prefix ‘bc1’.
When a user inputs an address into their wallet in order to send bitcoin to that address, the wallet examines the address type and constructs the appropriate script. This script, called the scriptPubKey, is appended to the amount being sent to the address. These two pieces of data—the amount and the scriptPubKey—form an output.