У меня есть соответствующий вопрос, который подчеркивает мое слабое понимание того, как работать с указателями. Я объявляю переменную-указатель с именем
FILE *MEMORY_CARD = fopen("card.raw", "r")
В моем понимании, я только что объявил указатель с именем MEMORY_CARD, который содержит информацию из файла с именем card.raw. Хорошо, теперь я хотел бы проверить, является ли этот указатель NULL.
Должен ли я сделать это так:
if (MEMORY_CARD == NULL)
{
exit(1);
}
Или вот так:
if (*MEMORY_CARD == NULL)
{
exit(1);
}
Кажется, что первый случай верен, потому что я видел, как он это сделал Кстати, но исходя из моего текущего понимания, я подумал, что вам нужно будет сделать это в соответствии с нижним путем. Это потому, что я подумал, что каждый раз, когда вы хотите проверить значение по адресу, на который указывает указатель, вы должны использовать оператор разыменования, так что * MEMORY_CARD - это ссылка на информацию в этом месте, то, что вы хотите проверить на ноль. Я бы подумал, что верхний путь был бы неверен, так как он спрашивает: «Проверьте, не находится ли внутри переменной MEMORY_CARD значение NULL (которое я никогда не объявлял. Я объявил указатель с именем * MEMORY_CARD). Переменная будет выглядеть как int i = 1, где Я не использую указатель.
Я испытываю ту же путаницу, когда мне нужно проверить, является ли то, что я объявляю с помощью mallo c, значением Null. Я ссылаюсь на него с * префиксом имени или просто ссылаться на него как на переменную. Возможно, я все еще путаюсь с базовым определением указателя против переменной. Надеюсь, что эти примеры проливают свет на более широкую концепцию изображения, что я немного туманен. Я посмотрел на Я немного ресурсов, но они, кажется, не достаточно глубоко погрузились в мелочи этого. Надеюсь, кто-то может помочь мне разобраться в этом. Заранее спасибо!