Ошибка "cannot convert 'struct1 *' to 'struct1 *' (передача указателя на массив структур в функцию) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Уважаемые специалисты, помогите, пожалуйста, исправить ошибку. Код следующий:
#include "stdio.h"
#include "conio.h"
 
#define sz 4
#define szsn 200
#define szfn 100
#define szpn 100
#define f 15
 
struct fulln  {char sn[szsn]; char fir[szfn]; char pn[szpn]; };
struct date {int num; int mon; int year; };
struct stud {struct fulln fio; struct date ent; struct date exc; };
 
void printstr(struct stud *p, int n, int x, int y);
 
void main()
{
 clrscr();
 
struct stud list[sz]=
 { {{"Petrov", "Petr", "Ivanovich"}, {25,12,1980}, {0,0,0}},
     {{"Sidorov", "Ivan", "Nikolaevich"}, {1,1,2000}, {12,1,2001}},
     {{"Chukhyrmukhyrr", "Georgiy", "Alexandrovich"}, {1,9,2010}, {1,7,2014}} };
 
 struct stud *C;
 C=&list[0];
 
printstr(C, 3, 2, 17);
 
 getch();
}
 
void printstr(struct stud *p, int n, int x, int y)
{
    int i, j;
    for(i=0; i<n; i++)
    {
             gotoxy(x,y+i);
         cprintf("%s", (p+i)->fio.sn);
             gotoxy(x+f+1,y+i);
             cprintf("%s", (p+i)->fio.fir);
         gotoxy(x+f*2+1,y+i);
         cprintf("%s", (p+i)->fio.pn);
    }
}
Борланд ругается на строку № 28
printstr(C, 3, 2, 17);
Сообщение об ошибке: "cannot convert ' stud *' to ' stud *' Все что нашла об этой ошибке:
Cannot convert тип_1 to тип_2 Сообщение об ошибке этапа компиляции (невозможно преобразовать тип_1 в тип_2) Присваивание, инициализация или выражение требует выполнение заданного преобразования типа, но данное преобразование недопустимо.
т.е. переменной типа struct stud* присваивается значение типа struct stud*, но они же вроде одинаковые... Не судите строго, я только учусь...

Решение задачи: «Ошибка "cannot convert 'struct1 *' to 'struct1 *' (передача указателя на массив структур в функцию)»

textual
Листинг программы
#include "stdio.h"
#include "conio.h"
 
#define sz 4
#define szsn 200
#define szfn 100
#define szpn 100
#define f 15
 
struct fulln  {char sn[szsn]; char fir[szfn]; char pn[szpn]; };
struct date {int num; int mon; int year; };
struct stud {struct fulln fio; struct date ent; struct date exc; };
 
void printstr(struct stud *p, int n, int x, int y);
 
void main()
{
 clrscr();
 struct stud list[sz]=
 {
     {{"Petrov", "Petr", "Ivanovich"}, {25,12,1980}, {0,0,0}},
     {{"Sidorov", "Ivan", "Nikolaevich"}, {1,1,2000}, {12,1,2001}},
     {{"Chukhyrmukhyrr", "Georgiy", "Alexandrovich"}, {1,9,2010}, {1,7,2014}}
 };
 
 struct stud *C;
 C=&list[0];
 
 printstr(C, 3, 2, 17);
 
getch();
}
 
void printstr(struct stud *p, int n, int x, int y)
{
    int i, j;
    for(i=0; i<n; i++)
    {
         gotoxy(x,y+i);
         cprintf("%s", (p+i)->fio.sn);
         gotoxy(x+f+1,y+i);
         cprintf("%s", (p+i)->fio.fir);
         gotoxy(x+f*2+1,y+i);
         cprintf("%s", (p+i)->fio.pn);
    }
}

Объяснение кода листинга программы

  1. Включаются заголовочные файлы stdio.h и conio.h.
  2. Определяются константы:
    • sz (4);
    • szsn (200);
    • szfn (100);
    • szpn (100);
    • f (15).
  3. Определяется структура fulln с полями:
    • char sn[szsn];
    • char fir[szfn];
    • char pn[szpn].
  4. Определяется структура date с полями:
    • int num;
    • int mon;
    • int year.
  5. Определяется структура stud с полями:
    • struct fulln fio;
    • struct date ent;
    • struct date exc.
  6. Определяется функция printstr.
  7. В функции main() создается массив структур stud list размером sz (в данном случае 4).
  8. Инициализируются первые три элемента массива.
  9. Создается указатель C на первый элемент массива list.
  10. Вызывается функция printstr(), передавая в нее указатель C, размер массива (3), координаты вывода (2,17) и значения переменных n, x, y, которые используются в функции printstr().
  11. В функции printstr() используется цикл for для перебора элементов массива p, начиная с индекса 0 и до n-1.
  12. Внутри цикла выводятся значения полей структур fulln на экран с помощью функции cprintf().
  13. Координаты вывода задаются с помощью функции gotoxy().
  14. Значения переменных x, y используются для задания координат вывода.
  15. Значение переменной f используется для задания смещения между полями структур fulln.
  16. Значение переменной i используется для задания номера текущего элемента массива.
  17. В конце функции main() вызывается функция getch().

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы