malloc
используется для выделения памяти.Вы можете использовать указатель, выделив его с помощью malloc
или указав на уже выделенную часть памяти.
В первом случае, который вы показали, если вы не указали указатель на адрес, этоне выделены и не могут быть использованы.Например, вы можете указать ему выходное значение типа int:
int value = 0;
int* pointer;
pointer = &value;
Но вы не можете присвоить ему значение:
int value = 0;
int* pointer;
*pointer = value; // wrong because pointer is not allocated
Это то, для чего предназначен ваш второй случай.
calloc
- это в основном malloc
+ инициализация.
Edit : Несмотря на это, это не очень хороший пример использования malloc.Лучшее использование, вероятно, когда вам нужно выделить массив переменного размера (не известен во время компиляции).Тогда вам нужно будет использовать:
int* array = (int*)malloc(N * sizeof(int));
Это полезно по двум причинам:
- Если N - переменная, вы не можете делать статическое распределение, например
int array[N];
- Стек может быть ограничен тем, сколько места вы можете выделить.