Пусть я объясню вам простой способ.
1.
Переменные содержат данные (значения, хотят их держать) и указатели держать только адреса памяти переменных (которые только часть памяти). Указатели используются, чтобы просто удерживать адрес переменных, чтобы они не могли хранить какие-либо пользовательские данные. Мы можем хотя бы создать указатель на переменную и манипулировать этой переменной с помощью конкретного указателя. Сначала нам нужно создать переменную, затем мы создаем указатель, который ссылается на эту переменную, тогда мы делаем что-либо с указателем, и переменная будет манипулировать.
struct point
{
int x;
int y;
};
struct point var1; //declare a variable
struct point *ptr=&var1;// declare a pointer to that variable
ptr->x = 8; // manipulate the variable
ptr->y = 8;
Или
2.
Если вы настаиваете на использовании только указатели, то вам нужно выделить память динамически, а затем назначить базовый адрес выделенной памяти для указателя.
struct point
{
int x;
int y;
} *ptr;
ptr=(struct point*)malloc(sizeof(struct point)); // this will allocate memory required to hold your structure
ptr->x = 8; //manipulate the memory content pointed by your pointer.
ptr->y = 8;
Адрес, на который указывает 'ptr'?(ключ: отсутствует выделение памяти) –
@ForceBru 'malloc (1)' явно ошибочно, должно быть 'sizeof (struct point)'. – fluter
@fluter или, если на то пошло, 'ptr = malloc (sizeof * ptr);' –