Нет, вы запрашиваете размер символа указатель , который равен 4 в вашей реализации.
Это потому, что вы переводите разыменованный указатель int
p
на указатель char
, а затем запрашиваете его размер.
Разбивка:
sizeof((char *)(*p))
| \__/
| \_ Dereference p to get an int.
\___________/
\_____ Convert that to a char * (size = 4).
Если вы хотите обработать первый символ вашего int
(который, в конце концов, является массивом символов, который вы в любом случае произвели), вы должны использовать:
sizeof(*((char*)(p)))
Это указатель int
, приведенный обратно к указателю char
, и затем разыменовывается.
Взлом , что вниз:
sizeof(*((char *)(p)))
| \________/
| \_ Get a char * from p (an int *)
\___________/
\_____ Dereference that to get a char (size = 1).