An address is just a compact, typo-resistant way to write a locking script. The prefix tells you which kind of script it is.
P2PK (2009)
The earliest coins, including many mined by Satoshi, were locked directly to a public key. There is no address format for it, and it reveals the key before spending.
P2PKH: starts with 1
"Pay to public key hash" locks coins to the 20-byte HASH160 of a public key. The address is Base58Check-encoded with version byte 0x00. It has a 4-byte checksum, so a typo is almost always caught.
P2SH: starts with 3 (BIP16, 2012)
"Pay to script hash" locks coins to the hash of any script, the redeem script. The spender reveals the script and satisfies it. That made multisig practical, because the sender no longer needs to know the details. P2SH was also used to wrap SegWit (P2SH-P2WPKH) during the transition.
P2WPKH and P2WSH: start with bc1q (BIP141, 2017)
Native SegWit version 0 outputs. P2WPKH commits to a 20-byte key hash, P2WSH to a 32-byte SHA-256 of a script. Signatures move to the witness, which is cheaper per byte. Addresses use bech32 (BIP173): lowercase, no confusing characters, and strong error detection.
P2TR: starts with bc1p (BIP341, 2021)
Taproot is SegWit version 1. The output is a 32-byte x-only public key that can be spent with a single schnorr signature or through a hidden tree of scripts. Bech32m (BIP350) replaced bech32 for version 1 and later, because bech32 had a weakness with certain inserted or deleted characters.
Comparing them
Spending a single-key input costs roughly 148 vbytes for P2PKH, about 68 for P2WPKH and about 57.5 for P2TR. Newer types are cheaper and, with Taproot, more private, because simple and complex spends can look the same.
Rule of thumb
Every wallet should be able to send to all of these. If yours cannot send to bc1p addresses, it is outdated.