У меня есть следующая инструкция
Эти штуковины называются "заявлениями".
float *f = (float*) malloc(5*sizeof(float));
Не разыгрывайте результат malloc:
float *f = malloc(5 * sizeof(float));
Еще лучше, определить размер указателем, для которого вы выделяете память:
float *f = malloc(5 * sizeof(*f)); // 5 times sizeof the type, f points to
Таким образом, вы в безопасности, даже если тип f
изменится. Нет шансов забыть изменить тип после sizeof
.
Теперь f
указывает на область памяти, достаточно большую, чтобы вместить пять последовательных float
с;
f
просто переменная, как и все остальные. Давайте сначала возьмем адрес какой-нибудь менее страшной переменной:
int i;
int *ptr = &i; // &i yields the address of the variable i.
// The type of i is (int),
// so a pointer to it is of type (pointer to (int)) -> int*
сейчас f
:
float *f = malloc(5 * sizeof(*f)); // or, instead of the result of malloc() simply
// the address of some automatic float variable
float **ptr = &f; // &f yields the address of the variable f.
// The type of f is (pointer to float) -> float*,
// so a pointer to it is of type (pointer to (pointer to float) -> float**