Я только начал изучать C, и я использовал некоторые простые программы, используя MinGW для Windows, чтобы понять, как работают указатели. Я попытался следующие:Прямое присвоение значений C Указатели
#include <stdio.h>
int main(){
int *ptr;
*ptr = 20;
printf("%d", *ptr);
return 0;
}
который правильно составлен, но при запуске исполняемого файла он не работает - значение не выводится в командной строке, вместо этого я получаю сообщение об ошибке, которое говорит, что .exe файл перестал работать.
Однако, когда я попытался сохранения значения в переменной INT и назначить * PTR на адрес памяти этой переменной, как показано ниже:
#include <stdio.h>
int main(){
int *ptr;
int q = 50;
ptr = &q;
printf("%d", *ptr);
return 0;
}
он работает отлично.
Мой вопрос: почему я не могу напрямую установить буквальное значение указателю? Я смотрел учебники онлайн для указателей, и большинство из них делают это так же, как второй пример.
Любая помощь приветствуется.
Причина, по которой указатель не инициализирован - он может указывать на почти везде и может привести к сбою программы. – Till
Вам повезло, что он завершился ошибкой. – JonnyRo
@ JonnyRo прав. В реальном коде эта ошибка обычно приводит к недельным отладкам, которые пытаются выяснить, почему какая-то другая переменная случайным образом изменяется каждый раз в то время (никогда, когда вы на самом деле проверяете ее, всегда, когда вы делаете публичная демонстрация) или эксплойты безопасности, когда кто-то устанавливает флаг «is_admin» в true, манипулируя разными значениями. – abarnert