Когда использовать NULL и когда использовать '\ 0' в связанном списке в C?

Я узнал, что в C:null char == '\0' == NULLи я написал цикл ниже для чтения от начала до конца символа [] в C.

// case #1
char buf[32];
while (buf[i] != NULL){
    //do something...
}  

Однако мой компилятор gcc дал мне предупреждение: сравнение между указателем и целым числом. Кто-то упомянул, что я путал два отдельных понятия: NULL для указателей, тогда как '\ 0' для символов. Поэтому, чтобы избавиться от предупреждения, я должен использовать '\ 0', так как мой цикл проверяет символ.

Сейчас я пишу связанный список и проверяю, указывает ли указатель головы на узел или нет. Так как это структура, разумно использоватьif (h1 == NULL) но, видимо, компилятор также компилируется, когда я используюif (h1 == '\0') хотя узел является структурой, но не символом. Может ли кто-то помочь, почему в этом случае можно использовать как '\ 0', так и NULL, в то время как их нельзя использовать в первом случае?

// case #2
struct ListNode {
    int val;
    struct ListNode *next;
};

Ответы на вопрос(3)

Ваш ответ на вопрос