c3 - это массив из 8-ми символов типа char или более просто - строка с 0x00 в конце, а
с4 - массив из 8-ми указателей!!! на строки (почувствуй разницу).
масив с3:
адрес: ! 12000000 ! 12000001 ! 12000002 ! 12000003 ! 12000004 ! 12000005 ! 12000006 ! 12000007 !
значение:! 0x31 ! 0x00 ! 0x00 ! 0x00 ! 0x00 ! 0x00 ! 0x00 ! 0x00 !
с3 = 12000000
масив с4:
адрес: ! 12000010 ! 12000011 ! 12000012 ! 12000013 ! 12000014 ! 12000015 ! 12000016 ! 12000017 !
значение:! 12000020 ! 12000030 ! 12000040 ! 12000050 ! 12000060 ! 12000070 ! 12000080 ! 12000090 !
с4 = 12000010
адрес 12000020 = 0x31, 0x00
адрес 12000030 = 0x32, 0x00
адрес 12000040 = 0x33, 0x00
адрес 12000050 = 0x34, 0x00
адрес 12000060 = 0x35, 0x00
адрес 12000070 = 0x36, 0x00
адрес 12000080 = 0x37, 0x00
адрес 12000090 = 0x38, 0x00
В реальных программах конечно не так, но очень похоже.
А теперь ответ на вопрос: в первом операторе sizeof(c3) ты просишь вывести размер масива с3, и он занимает 8 байт, а во втором операторе sizeof(*c4) ты просишь вывести размер значения масива по адресу с4 (это тоже самое что c4[0]), а так как значениями массива являются указатели и в 32-х разрядных системах они занимают 4 байта, ты получаешь искомый результат.
И, кстати, попробуй угадать, что получится, если написать sizeof(c4)?
P.S. Вообще-то такие вещи можно посмотреть в отладчике (debuger по ихнему)
Эх, все сдвинулось, а я так долго набивал
![Frown :( :(](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f641.png)