Depende de qual tipo o buffer é.
O mais provável buffer é um ponteiro para o início do buffer. A declaração de estilo C para ele pode ser struct stackElement *buffer; ou algo semelhante (observe o asterisco!).
Nesse caso:
-
p &bufferimprime o endereço onde o próprio ponteiro está armazenado (por exemplo, "o endereço do endereço do buffer") -
p bufferdeve imprimir o valor da variávelbufferpointer, que é o endereço do buffer. -
p *bufferdeve imprimir o conteúdo do buffer.
Se buffer for algum tipo de estrutura e não um ponteiro (por exemplo, a declaração C pode ser struct stackElement buffer; sem asterisco), então:
-
p &bufferimprime o endereço onde a estrutura está, ou seja, o endereço do buffer -
p bufferimprime o conteúdo dessa estrutura (= se for uma pilha, provavelmente o primeiro elemento da pilha) -
p *bufferé um erro.