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 Тоесть, интерпритируем сначала то, что в самих внутренних скобках, а если в скобках на одном уровне есть и указатель и масив/функция, то помним что приоритет у масивов и функций больший чем в указателей. Масив и функция имеют ровний приоритет, поетому интерпритируются с лева на право, следовательно масив функций записывается так - [](), а не так - ()[] Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти