little_greg Posted October 8, 2009 Report Share Posted October 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; }} Link to comment Share on other sites More sharing options...
little_greg Posted October 8, 2009 Author Report Share Posted October 8, 2009 расскажите, пож, про массив указателей на функции. Link to comment Share on other sites More sharing options...
Lion HC Posted October 9, 2009 Report Share Posted October 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 Тоесть, интерпритируем сначала то, что в самих внутренних скобках, а если в скобках на одном уровне есть и указатель и масив/функция, то помним что приоритет у масивов и функций больший чем в указателей. Масив и функция имеют ровний приоритет, поетому интерпритируются с лева на право, следовательно масив функций записывается так - [](), а не так - ()[] Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now