When bitcoins are sent to an address, they are sent using the standard pay-to-hash output script:
OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
For the receiver to spend this output, they need to supply a scriptSig of:
And thus you see that the public key is revealed when the receiver spends the bitcoins. Until such a time, the public key
may remain unknown.