(https://en.bitcoin.it/wiki/Protocol_documentation is a good resource for technical details about the protocol)
At the topmost level, blocks contain three things:
- 80 byte block header.
- VarInt for the number of transactions in the block (N).
- N concatenated transactions.
The block header contains:
- 4 byte version number
- Prev block hash pointer.
- Merkle hash/root of the N transactions in the block. (See What is the Merkle root?)
- Block timestamp
- Difficulty to solve the block encoded as an integer.
- Nonce - an easy number to change to try different hash values.
I think you are asking: what is the 2nd block header parameter in block k+1?
Each hash pointer in a block to point to the previous block is SHA256(SHA256(80 byte header of block k))
.
Is the input for the hash pointer in block k+1 just the transactions in block k or is it the transactions in block k as well as the hash of block k-1?
It's just the hash of the header. The header contains a hash of the transactions, though, the merkle root.
Does the hash pointer in block k+1 look like this : H(k) or this : H(k||H(k-1))?
Neither.
In block k+1, there is a bunch of data as well as a hash pointer for the block k. But does block k+1 contain a hash of the entire block k (so, the data and H(k-1))? Because if block k+1 contained a hash of the entire block k then it should contain a hash of the hash already contained in block k right?
You do need the hash pointer in block k to be able to calculate the hash pointer in block k+1. Verifying the hash pointers and their difficulties is a small part of the work of miners.