sizeof
возвращает размер в байтах своего операнда. Это должно ответить на вопрос номер 1.;) Кроме того, строковый литерал имеет тип «array to n const char» при передаче в sizeof
.
Ваши тестовые примеры поочередно:
"f"
является строковым литералом, состоящим из двух символов, символа f
и завершающего NUL. foo
является указателем (редактирование: независимо от квалификаторов) и указатели кажутся 4 байтами в вашей системе .. bar
случай тот же, что и "f"
. Надеюсь, что это помогает.