little_greg Опубликовано 8 октября, 2009 Жалоба Поделиться Опубликовано 8 октября, 2009 помогите найти ошибку, программа на выходе выдает какой-то бред ("bet_of_processof = 2...") #include <iostream>#include <string>using namespace std;const int SLEN = 30;struct student{ char fullname[sLEN]; char hobby[sLEN]; int ooplevel;};//ââîä èíôîðìàöèèint getinfo(student ptr[], int);//îòîáðàæåíèå èíôîðìàöèè void display1(student st); void display2(const student* ps);void display3(const student pa[], int n);int main(){cout << "enter array's size: ";int class_size;(cin >> class_size).get();student* ptr_stu = new student[class_size]; //âûäåëåíèå ïàìÿòè äëÿ ìàññèâà ñòðóêòóðint entered = getinfo(ptr_stu, class_size);for (int i = 0; i < entered; i++){ display1(ptr_stu[i]); display2(&ptr_stu[i]);}display3(ptr_stu, entered);delete[] ptr_stu; //îñâîáîæäåíèå ïàìÿòècout << "done\n";system("pause");return 0;}int getinfo(student ptr[], int size){//åñëè fullname ïóñòàÿ ñòðîêà - âûõîä èç öèêëàint str_size = 0;cout << "enter name: ";while (cin.getline(ptr->fullname, 30) && strlen(ptr->fullname) != 0 && str_size < size){ cout << "enter hobbies: "; cin.getline(ptr->hobby, 30); cout << "enter ooplevel: "; (cin >> ptr->ooplevel).get(); cout << "enter name: "; str_size++;}cout << "\nstructures entered: " << str_size << endl;return str_size;}void display1(student st){ cout << st.fullname << endl << st.hobby << endl << st.ooplevel << endl;}void display2(const student* ps){ cout << ps->fullname << endl << ps->hobby << endl << ps->ooplevel << endl;}void display3(const student pa[], int n){ for (int i = 0; i < n; i++) { cout << pa[i].fullname << endl << pa[i].hobby << endl << pa[i].ooplevel << endl; }} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
little_greg Опубликовано 8 октября, 2009 Автор Жалоба Поделиться Опубликовано 8 октября, 2009 расскажите, пож, про массив указателей на функции. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Lion HC Опубликовано 9 октября, 2009 Жалоба Поделиться Опубликовано 9 октября, 2009 расскажите, пож, про массив указателей на функции. p[] - масив *p[] - масив указателей (*p)[] - указатель на масив //по умолчанию, сначала интерпритируется масив, или функцыя, а потом указатель. Поетому для изменения приоритета надо взять указатель в скобки. *(*p)[] - указатель на масив указателей **p[] - масив указателей на указатели int p(char) - функция, с параметром char, что возвращает int int p() - функция, без параметров, что возвращает int int *p() - функция, что возвращает указатель на int int (*p)() - указатель на функцию, что возвращает int // опять же изменяем приоритет int *(*p)() - указатель на функцию, что возвращает указатель на int int **p() - функция, что возвращает указатель на указатель на int а теперь про массив указателей на функции: p[] - масив *p[] - масив указателей (*p[])() - масив указателей на функции // опять же, для изменения приоритета, берем масив указателей в скобки *p[]() - масив функций, что возвращают указатель // вот, что выйдет, если не взять масив указателей в скобки // потому, что интерпритация хоть и идет привычно нам с лева на право; но масивы и функции имеют большый приоритет чем указатель *p()[] - функция масивов указателей // вообще бред получается, но примерно так оно может интерпритироваться в последнюю очередь интерпритируется спецификатор типа, поетому тип возвращаемый функциями из масива нашых указателей пишим хоть и на первое место, но в последнюю очередь: int (*p[])() - масив указателей на функции, не принимаючие параметры и возвращающие int int (*p[])(char) - масив указателей на функции, принимаючие один параметр типа char и возвращающие int еще, если хотите один пример: int (*(*p)[])(char) - указатель на масив указателей на функции, принимаючие один параметр типа char и возвращающие int Тоесть, интерпритируем сначала то, что в самих внутренних скобках, а если в скобках на одном уровне есть и указатель и масив/функция, то помним что приоритет у масивов и функций больший чем в указателей. Масив и функция имеют ровний приоритет, поетому интерпритируются с лева на право, следовательно масив функций записывается так - [](), а не так - ()[] Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.