Вы, наверное, не понимают, что *
в объявлении указателя и *
в выражении указатель арифметики означать совершенно противоположные вещи.
uint64_t *var1 = NULL;
это объявляет uint64_t
указатель (тип uint64_t*
)
*var1 = 0;
это разыменовывает указатель, то есть доступ к памяти хранятся на его адрес. Он не дает указателю новое значение. Он изменяет указанные данные. И в этом случае нет указательных данных. NULL
не может указывать на данные. Отсюда и ошибка.
Если вы хотите изменить значение указателя, просто сделать
var1 = 0;
Я извиняюсь, если я неправильно понял намерения в вашем вопросе. В этом случае, если вы хотите изменить значение привязанных данных, ну, сначала укажите указатель на некоторую записываемую память!
uint64_t var = 100;
/* ... */
var1 = &var; /* Get a pointer to the memory that is the variable var */
или
uint64_t *var1 = malloc(sizeof(uint64_t)); /* Allocate memory for one uint64_t on the heap and set var1 to point at it */
Благодарим за описание (комментарии). Это очистило мои сомнения. – user3269606