Давайте разберем смысл некоторых запутанных выходных значений, которые вы видите!
Во-первых, sizeof(array)
и sizeof(array[0])
(где ваш метод вывода в порядке). Вы определили / определили array
как массив из двух char*
значений, каждое из которых является указателем. Размер указателя в вашей системе составляет 8 байт, поэтому общий размер array
составляет: 8 * 2 = 16 . Для массива [0]: это один указатель, поэтому его размер составляет всего 8 байтов.
Имеет ли все это смысл до сих пор? Если это так, то давайте посмотрим на вторую часть вашего кода…
Значения sizeof(char)
, sizeof(int)
, sizeof(float)
и sizeof(double)
, в вашей системе , по порядку, 1, 4, 4 и 8. Эти значения фактически выводятся! Однако, так как вы также выводите возвращаемое значение printf()
, которое является числом написанных им символов, вы получаете дополнительные значения «2», «2», «2» и «1» (взапутанный и, возможно, неопределенный порядок) для четырех вызовов (последний не имеет новой строки, поэтому это только один символ; все остальные - одна цифра + новая строка = 2 символа).
Изменить вторую частьвашего кода следующим образом, чтобы получить правильные выводы:
printf("%zu\n", sizeof(char)); //1
printf("%zu\n", sizeof(int)); //4
printf("%zu\n", sizeof(float)); //4
printf("%zu\n", sizeof(double)); //8