Код дает ошибка говоря это «ни один оператор не соответствует этим двум операндам» в if
утверждение сравнения. Я понимаю, это должно означать, что «узел не может быть преобразован / приведен в целое число». Но оператор print печатает целочисленное значение для w[2]
при использовании с %d
формат. Почему это происходит? не printf
кастинг это?
NODE *w=(NODE *)malloc(4*sizeof(NODE));
if(w[2]==0)
printf("%d\n",w[2]);
Структура узла — это
struct node{
int key;
struct node *father;
struct node *child[S];
int *ss;
int current;
};
Пожалуйста, обратитесь к комментариям cdhowie. Он ответил на вопрос.
Поведение, которое вы видите по отношению к printf()
не определено printf()
не проверяет аргументы типа; Предполагается, что заданные вами аргументы соответствуют спецификаторам формата, которые вы указали в строковом аргументе.
Другими словами, вы вызываете неопределенное поведение. Код типа %d
ожидает int
в качестве аргумента, но вы указываете NODE
объект вместо Здесь может произойти все что угодно — например, ваша программа может аварийно завершить работу (хотя это маловероятно). По крайней мере, вы не можете полагаться на то, что этот конкретный вывод будет согласованным на разных платформах или компиляторах.
Если вы превратите предупреждения вашего компилятора в максимум, он должен предупредить вас об этом. Современные компиляторы проверят аргументы типа printf()
для вас (при условии, что вы предоставляете строковый литерал в качестве первого аргумента, а не переменную или выражение), но это чисто проверка во время компиляции, и она будет генерировать только предупреждения, а не ошибки.
Других решений пока нет …