Перейти к содержанию
СофтФорум - всё о компьютерах и не только

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


Рекомендуемые сообщения

помогите найти ошибку, программа на выходе выдает какой-то бред ("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; }}
Ссылка на комментарий
Поделиться на другие сайты

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

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

Тоесть, интерпритируем сначала то, что в самих внутренних скобках, а если в скобках на одном уровне есть и указатель и масив/функция, то помним что приоритет у масивов и функций больший чем в указателей. Масив и функция имеют ровний приоритет, поетому интерпритируются с лева на право, следовательно масив функций записывается так - [](), а не так - ()[]

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...