Рассмотрим
int m;
int n;
m = n;
Это недопустимо, потому что вы пытаетесь использовать n
, но вы не присвоили ему значение.Сейчас:
int *a;
*a = -2;
Кроме того, это является недопустимым, потому что вы пытаетесь использовать a
, но вы не присвоили ему значение. Значение a
не является int
, это указатель на int
. Например,
int someint;
a = &someint;
*a = -2;
ставит -2 в someint
. Без назначения на a
место, куда нужно поставить -2, не подлежит определению. Кроме того,
a = malloc(sizeof(int));
*a = -2;
Здесь a
присваивается значение адреса какого-либо места в куче; -2 переходит в это место кучи.
Возможно, аналогия была бы полезна:
Рассмотрим фразу «ее собака». Это ссылка на чью-то «собаку», но она не сделает, чтобы сказать «дайте собаке кость», если вы не сказали мне, кто она. Точно так же «указатель на int» не сообщает системе, которая есть int.
«Не следует автоматически выделять память» - Откуда у вас такая идея? Это, конечно, неверно. Сколько памяти должно быть выделено указателю *, который может указывать на произвольно длинный массив 'int'? –
@ Code-Guru: я бы подчеркнул * раньше *, а не _must_. ;-) –
@PieterGeerkens Хорошая точка (er) –