В педантичной теории массивы и указатели - это разные вещи, поскольку массив задает область памяти и, следовательно, размер массива является частью его типа. Поэтому говорят, что имя массива распадается на указатель при использовании в этом контексте. В C-FAQ есть подробное объяснение .
На практике они одинаковы, поскольку формально a[i]
- это то же самое, что и *(a+i)
, и, следовательно, серверная часть компилятора обрабатывает имя массива и указатель точно так же. Единственное, о чем стоит беспокоиться, это то, что
void foo()
{
int a[5]; // allocates five words of space on the stack
int *b; // allocates *one* word of space on the stack (to hold the pointer)
}
Ваш фрагмент кода в порядке. Просто будьте осторожны, чтобы освободить память, которую выполняет ваша функция malloc()
в том, кто ее вызывает.