str
- это массив 8-битных символов, включая нулевой терминатор.
p
- это указатель, который, как правило, соответствует размеру собственного размера слова машины (32-разрядного или 64-разрядного).
Размер, занимаемый указателем, остается постоянным, независимо отразмер памяти, на которую он указывает.
EDIT
В C ++ аргументы, являющиеся массивами, передаются по ссылке (которая внутренне является типом указателя), этопочему второй экземпляр str
имеет sizeof
8.