зачем писать sizeof в функциях?
Всем привет,я не силен в си,и не понимаю,зачем в разных функциях записи указывать размер типа.Например: Функция для записи в файл:
void put_rec(int rec[6],FILE *fp)
{
int len;
len=fwrite(rec,sizeof(int)*6,1,*fp);
if(len!=1)printf("Ошибка при записи");
}
Так вот,зачем указывать размер sizeof(int)*6 при записи?Почему не хватит того что мы записываем массив из 6 чисел?Ведь этот массив все таки имеет размер и по нему нельзя понять сколько записывать?
P.s Шилдт пишет что размер sizeof() выполняется во время компиляции и в программе размер рассматривается как константа.
Про какую тогда машинную независимость пишет Шилдт когда она выполняется на стадии компиляции?
Ответы (1 шт):
Функция fwrite(...) в качестве второго параметра принимает размер одного объекта в байтах. В качестве объекта может использоваться char, int или, например, struct. А третий параметр, в свою очередь, предлагает указать количество таких элементов.
В вашем случае – fwrite(rec, sizeof(int) * 6, 1, *fp) – размер объекта равен sizeof(int) * 6 (размер массива, который функция put_rec получает на входе), а всего таких элементов – один (единственный массив, соответственно). То есть sizeof(...) сообщает функции, что будет записано что-то, имеющее размер в 24 байта (4 * 6 * 1).
С таким же успехом можно слегка изменить вызов функции: fwrite(rec, sizeof(int), 6, *fp) (пишем 6 объектов типа int).
И да, компилятор заменит sizeof(int) на результат этого вызова в целях оптимизации. Писать так или по-другому – вопрос читаемости и переносимости программы.