2015-05-25 2 views
1

Я нашел этот кусок кода, и я не понимаю, что это значит. Имеем ли мы право использовать обозначение массива, как здесь?Можем ли мы использовать обозначение массива для памяти, выделенной malloc?

double *myList = malloc(3 * sizeof(double)); 
myList[0] = 1.2; 
myList[1] = 2.3; 
myList[2] = 3.4; 

EDIT: Я считаю, что это обозначение использует тот факт, что адрес памяти MyList [0], MyList [1], MyList [2] являются последовательными. malloc() не гарантирует, что адреса будут назначены последовательно.

+2

Да, это то, как вы динамически выделяете массив –

+2

Да. 'myList [x]' действительно использует арифметику указателя, чтобы перейти к элементу 'x', а затем разыменовать это местоположение. То есть 'myList [x]' эквивалентно '* (myList + x)' – kaylum

+1

Предложите прочитать книгу на C. –

ответ

5
double *myList = malloc(3 * sizeof(double)); 

Он выделяет память для 3 double напечатал данные в указатель MyList. Следующие строки назначают double типизированные данные в этих местах.

myList[0] = 1.2; 
myList[1] = 2.3; 
myList[2] = 3.4; 

myList[2] эквивалентно *(myList+2).

Вы должны освободить эту память, используя free следующим после его использования:

free(myList); 

malloc выделяет последовательные места в памяти.

+1

нет необходимости бросать. это C. –

+0

@ KarolyHorvath исправлено, спасибо указать – Steephen

+0

Вам не нужно бросать возврат malloc. На самом деле, некоторые люди [советуют против этого] (https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). Я лично не думаю, что это проблема в любом случае, но поскольку она спорна, ее не следует представлять как должное. – kaylum

Смежные вопросы