What exactly is the input for the Hash pointer in block k+1? I'm not sure how to ask this question clearly so I will ask it three different ways and hopefully someone understands me.


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?
Does the hash pointer in block k+1 look like this : H(k) or this : H(k||H(k-1))?
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?


I hope I made some sense. Any help is appreciated.
(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.