В C переменная указателя на int (int *
) содержит адрес целого числа и может также использоваться для хранения адреса 1-го целого числа в массиве из нескольких, потому что вы можете достичь 2-го ипоследующие целые, просто добавив к адресу 1-го.malloc()
дает вам адрес блока памяти, который вы будете использовать для хранения lines
последовательных целых чисел, поэтому вы должны хранить адрес, который он вам дает, в переменной указателя на int, и соответствующий параметр readfile()
должен иметь этот тип тоже.
Внутри readfile()
, вы хотите дать fscanf()
call адрес i-го целого числа.Вы можете получить это, просто добавив i
к исходному адресу, потому что C позаботится о том, чтобы умножить для вас i
на sizeof (int)
:
int *data;
data=malloc(sizeof(int)*lines);
readfile(fp, data, lines);
...
free(data); /* Don't forget to release the memory eventually */
...
int readfile(FILE* fp,int* storage_array,int lines)
{
int i=0;
for(i=0; i<lines; i++)
{
fscanf(fp,"%lf",storage_array+i);
}
rewind(fp);
return 0;
}
Строка fscanf()
может быть эквивалентно записана
fscanf(fp,"%lf",&(*(storage_array+i)));
или даже
fscanf(fp,"%lf",&storage_array[i]);
, поскольку в C выражения *(a + b)
и a[b]
эквивалентны во всех отношениях.