Неверные бинарные операнды, отсутствующая теория - PullRequest
0 голосов
/ 18 сентября 2018

Я получаю сообщение об ошибке "недопустимые операнды в двоичном * (имеют 'double' и 'double *')". Я должен использовать функцию так, как она написана с указателями, хотя переменные для x, y обычно двойные, поэтому я отправилв их адрес, чтобы заставить функцию работать.Я не понимаю, почему для склона нет ошибки, но только для * y_intercept.

void determine_line(double *, double *, double *, double *, double *, double *);

int main()
{
    double x1 = 0.0, x2 = 0.0, y1 = 0.0, y2 = 0.0, m = 0.0, b = 0.0;

    x1 = readValue("x1");
    y1 = readValue("y1");
    x2 = readValue("x2");
    y2 = readValue("y2");

    double *y_intercept = &b;
    double *slope = &m;

    determine_line(&x1,&y1,&x2,&y2,slope,y_intercept);
    printf("\nThe points (%.2lf, %.2lf) and (%.2lf, %.2lf) are on the"
        " line: y = %.2lfx + %.2lf\n",x1,y1,x2,y2,*slope,*y_intercept);
}
void determine_line(double *x1, double *y1, double *x2, double *y2
, double *slope, double *y_intercept)
{
    *slope = (y1-y2)/(x1-x2);
    *y_intercept = y2 - (*slope) * x2 ; // error
}

1 Ответ

0 голосов
/ 18 сентября 2018

Все аргументы для determine_line являются указателями.Вам нужно разыменовать указатели, чтобы получить числа, с которыми вы можете выполнять арифметику.

Вы не получите ошибку для присваивания *slope, поскольку вычитание указателя разрешено, хотя в этом случае результаты не определеныпотому что указатели не указывают на одни и те же объекты.Но эта строка также требует разыменования для получения правильного результата.

void determine_line(double *x1, double *y1, double *x2, double *y2
, double *slope, double *y_intercept)
{
    *slope = (*y1-*y2)/(*x1-*x2);
    *y_intercept = *y2 - (*slope) * *x2 ;
}

Не ясно, почему первые 4 аргумента являются указателями в первую очередь.Единственными аргументами, которые должны быть указателями, являются slope и intercept, поскольку они используются для отправки результатов обратно.

...