Динамический массив
Первый, это динамический массив . Выражение char * buf = malloc(sizeof (char *) * 16)
хранит элементы в памяти (malloc
в основном используется для выделения памяти). Преимущества его использования в том, что вы можете перераспределить его, то есть изменить его размер во время выполнения. Однако вам, возможно, придется выделять новую память каждый раз, когда вы добавляете новый элемент. Вот пример:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main() {
int* array;
int n, i;
printf("Enter the number of elements: ");
scanf("%d", &n);
array = malloc(n*sizeof(int));
for (i=0; i<n; i++) {
printf("Enter number %d: ", i);
scanf("%d", &array[i]);
}
printf("\nThe Dynamic Array is: \n");
for (i=0; i<n; i++) {
printf("The value of %d is %d\n", i, array[i]);
}
printf("Size= %d\n", i);
getch();
return 0;
}
Выход:

Автоматический (статический?) Массив
Второе выражение char buf[sizeof (char *) * 16]
просто объявляет скучный автоматический массив. Это размер статичен. Без динамического изменения размера, перераспределения и т. Д.
примечание: извинения за тип, брошенный до malloc
. приведение возвращаемого значения malloc приведет к тому, что компилятор не выдаст ошибку , если вы сделаете что-то не так. Это может сопровождаться неопределенными ошибками во время выполнения и отладкой ада. Всегда избегайте типизации результата malloc
. Спасибо @Lundin.