The receiver address is part of the transaction. You can't just put IP-addresses there instead of BTC-addresses.
Actually, the address is not part of the transaction.
Addresses are just a standard way for humans to discuss a more complicated set of instructions.
What exists in the transaction is a set of instructions that say:
"In order for this unspent output to be spent, the spender must provide an ECDSA signature using the secp256k1 curve which can be validated with a public key that hashes to
the following value when hashed first with SHA256 and then with RIPEMD160."
The "value" that is then provided is a 48 digit number that is calculated from the information in the bitcoin address and which is stored by computers in binary (resulting in a value that is represented by your computer with one hundred sixty 1's and 0's) and often displayed as 40 Hex Decimal digits.
That is the "standard" bitcoin output script and it is represented by addresses that start with a "1". Specifically in the encoding to base 58, when the first 8 bits (the first byte) of an address are all 0's then those 8 bits are encoded as a single "1". All bitcoin wallets are written to understand that when an address converted from base58 back to binary has a first byte of zero, it means to create the specific set of instructions described above.
There are other "scripts" that encumber the output with other requirements which can be used as well. For example, this is why you can see addresses that start with a '3'. Those addresses have a completely different set of instructions that are part of the transaction, and wallets that accept addresses that start with a '3', know what script they are supposed to use for that indicator.
It is even possible to create a transaction with a script that has no standard address representation at all. Since there is no standard indicator for such a custom script, you wouldn't be able to use a typical wallet to create such a transaction or to spend the output created by such a transaction. You would instead need to create your own software to properly encode the script into the transaction, and your won software to meet the requirements of the script when you want to later spend it.