тип, структура и конверсия - PullRequest
0 голосов
/ 28 апреля 2019

Как мне типизировать эти переменные student1 и student2 и получить доступ к их переменной member?У меня были ошибки преобразования в переменную student1 и ученик 2.

typedef struct {
    int id;
    int hw_score[3];
    int final;
} Student;

int  intComparator(void* p, void* q) {
     return ((int)p - (int)q);
}

int   idComparator(void *student1, void *student2){

      int result;
      Student* s1, s2;

      s1 = (Student*)student1;
      s2 = (Student*)student2;

      result = intComparator((void*)(s1->id), (void*)(s2->id));

      if (result > 0) {return 1;}
      else if (result < 0) {return -1;}
      else {return 0;}

}


int main()
{
    int result;
    Student s1, s2;
    s1.id = 8;
    s2.id = 10;

    result = idComparator((void*)&s1, (void*)&s2);
    printf("result: %d\n", result);

    return 0;
}

Мне трудно понять void *.

1 Ответ

0 голосов
/ 28 апреля 2019

Кроме того, стратегия слишком сложна для выполнения простого вычитания, в вашем коде есть некоторые ошибки:

#include <stdio.h>       // a

typedef struct {
    int id;
    int hw_score[3];
    int final;
} Student;

int  intComparator(void* p, void* q) {
     return (*(int*)p - *(int*)q);   // b
}

int   idComparator(void *student1, void *student2){

      int result;
      Student* s1, *s2;      // c

      s1 = (Student*)student1;
      s2 = (Student*)student2;

      result = intComparator(&(s1->id), &(s2->id)); // d

      if (result > 0) {return 1;}
      else if (result < 0) {return -1;}
      else {return 0;}

}


int main()
{
    int result;
    Student s1, s2;
    s1.id = 8;
    s2.id = 10;

    result = idComparator(&s1, &s2);
    printf("result: %d\n", result);

    return 0;
}

a) printf нуждается в stdio.h

b) * voidтребуется разыменование типа: Разыменование пустого указателя

c) s2 не был указателем: Объявление указателей;звездочка слева или справа от пробела между типом и именем?

d) Вам не нужно приводить к типу void, однако функция ожидает адрес: Почему тип приводит к типу voidуказатель?

Это демоверсия live , но, опять же, подумайте об улучшении дизайна, сделав его понятнее и проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...