приведение узла к целому числу

Код дает ошибка говоря это «ни один оператор не соответствует этим двум операндам» в 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. Он ответил на вопрос.

1

Решение

Поведение, которое вы видите по отношению к printf() не определено printf() не проверяет аргументы типа; Предполагается, что заданные вами аргументы соответствуют спецификаторам формата, которые вы указали в строковом аргументе.

Другими словами, вы вызываете неопределенное поведение. Код типа %d ожидает int в качестве аргумента, но вы указываете NODE объект вместо Здесь может произойти все что угодно — например, ваша программа может аварийно завершить работу (хотя это маловероятно). По крайней мере, вы не можете полагаться на то, что этот конкретный вывод будет согласованным на разных платформах или компиляторах.

Если вы превратите предупреждения вашего компилятора в максимум, он должен предупредить вас об этом. Современные компиляторы проверят аргументы типа printf() для вас (при условии, что вы предоставляете строковый литерал в качестве первого аргумента, а не переменную или выражение), но это чисто проверка во время компиляции, и она будет генерировать только предупреждения, а не ошибки.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector