Jump to content
СофтФорум - всё о компьютерах и не только

передача структур функции С++


Recommended Posts

помогите найти ошибку, программа на выходе выдает какой-то бред ("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

расскажите, пож, про массив указателей на функции.

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...