В большинстве случаев указатель - это просто адрес данных в памяти.Существуют определенные соображения относительно того, какие адреса памяти доступны, а какие нет, какие адреса используются кодом и данными ... пространство памяти сегментировано, что означает, что некоторые адреса даже недоступны.
вы объявили указатель int *ip;
Затем вы присвоили ему значение 1000
.Последний должен быть адресом некоторых данных в памяти.Почему 1000?это может быть адрес памяти, который недоступен, или адрес памяти некоторых других данных или адрес памяти кода вашей программы.В общем, если вы не пишете программное обеспечение системного уровня, вы не можете делать какие-либо предположения о жестко закодированных адресах в памяти.Вы можете полагаться только на адреса, предоставленные вашей программой.Таким образом, ваша попытка присвоить значение памяти с адресом 1000 закончилась ошибкой сегментации, что означает, что этот адрес вам недоступен.
Существует несколько способов правильно использовать указатели.
1) использовать адрес существующей переменной:
int var;
int *ip = &var;
*ip = 5;
2) использовать адрес динамически распределенной памяти, возвращенный вам, скажем, malloc
int *ip = malloc(sizeof(int));
*ip = 5;
...
free(ip);