Форум программистов, компьютерный форум CyberForum.ru

Указатели на Функции - C++

Восстановить пароль Регистрация
 
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
22.02.2013, 02:10     Указатели на Функции #1
Прошу помогите мне понять это условие,уже прочитал кучу информации по поводу указателей,но все равно мало,что уложилось в моем понимании...А когда смотрю на условие просто теряюсь.
Может вы знаете более хорошие источники по этой теме,с большой охотой проанализирую и их...


1)Объявить указатели на функции.
2)Использовать указатели для вызова соответствующих функций.
3)Использовать оператор switch для выбора варианта функций.
Миниатюры
Указатели на Функции  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 02:47     Указатели на Функции #2
Цитата Сообщение от КенТюРиК Посмотреть сообщение
уже прочитал кучу информации по поводу указателей,но все равно мало,что уложилось в моем понимании
Что, собственно, непонятно? Сами указатели на функции?

Добавлено через 5 минут
Указатель на функцию - тот же прототип, только вместо имени функции пишется (*pf), где pf - указатель на функцию. При инициализации, pf присваивается имя функции, которая соответствует указателю по сигнатуре и по возвращаемому значению.
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
22.02.2013, 02:48  [ТС]     Указатели на Функции #3
Именно они.

Наверно задам глупый вопрос,но что в условии char(*func3)(int*,.....) означает многоточие?
Как и в 4 функции.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 03:05     Указатели на Функции #4
Точно не знаю. Думаю, любые другие параметры.

Добавлено через 8 минут
Вообще, функция с таким прототипом:
C++
1
void f(...);
может вызываться с произвольным набором параметров.
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
22.02.2013, 03:07  [ТС]     Указатели на Функции #5
Спасибо.
То есть сначала я должен обьявить все 5 функций,определить их,и потом вызвать с использование оператора switch?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 03:21     Указатели на Функции #6
Задание я сам не понимаю. Например, 4. Там скобки забыты или это уже не указатель на функцию, а просто прототип функции, которая возвращает int* ?
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
22.02.2013, 03:26  [ТС]     Указатели на Функции #7
Скобки точно не забыты т.к в других вариантах аналогичные примеры...

Добавлено через 2 минуты
Завтра попытаюсь поговорить с людьми,которые вникли в это условие раньше меня и уже будет от чего отталкиваться.
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
24.02.2013, 22:03  [ТС]     Указатели на Функции #8
Подскажите в чем заключается ошибка?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <iostream>
using namespace std;
 
//Описание функции сложения двух аргументов
float plus(float a, float b) {
  return a+b; 
}
 
int main()
{
  float x=2.1, y=4.89;
  // объявление указателя на функцию, 
  float (*func)(float,float);
  func=plus;// func инициализируется адресом
  (*func)(float,float);///вызов.
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
using namespace std;
 
//Описание функции сложения двух аргументов
float plus(float a, float b) {
  return a+b; 
}
 
int main()
{
  float x=2.1, y=4.89;
  // объявление указателя на функцию, 
  float (*func)(float,float);
  func=plus;// func инициализируется адресом
  (*func)(x,y);///вызов.
  cout<<plus(x,y);
system("pause");
  return 0;
 
}
так вроде норм
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.02.2013, 22:34     Указатели на Функции #9
Цитата Сообщение от КенТюРиК Посмотреть сообщение
Подскажите в чем заключается ошибка?
В вызове не указывается тип перменных, а только имена или значения.

Добавлено через 1 минуту
C++
1
cout << (*func)(x,y) << endl;
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
24.02.2013, 23:18  [ТС]     Указатели на Функции #10
Пишет,что слишком много аргументов в вызове функции..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stdafx.h"
#include <iostream>
using namespace std;
 
//Описание функции сложения двух аргументов
char func1(unsigned int a) {
  return a; 
}
 
char func2(int q, float w, double e)
{
    return q+w+e;
}
 
 
int main()
{
  unsigned int x='a';
  int q=2;
  float w=3;
  double e=3;
  // объявление указателя на функцию, 
  char (*prt)(unsigned int);
  prt=func1;// func инициализируется адресом
  (*prt)(x);///вызов.
  cout<<func1(x);
 
  char(*prt1)(int , float , double );
  prt1=func2;
  (*prt)(q,w,e);
 
system("pause");
  return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.02.2013, 23:32     Указатели на Функции #11
C++
1
(*prt1)(q, w, e);
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
24.02.2013, 23:41  [ТС]     Указатели на Функции #12
Спасибо))

Кстати можно вопросик,что нужно сделать чтобы я мог возвращать числа типом char?...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "stdafx.h"
#include <iostream>
using namespace std;
 
//Описание функции сложения двух аргументов
char func1(unsigned int a) {
  return a; 
}
 
char func2(int q, float w, double e)
{
    return q+w+e;
}
 
 
int main()
{
  unsigned int x='a';
  int q=2;
  float w=3;
  double e=3;
  // объявление указателя на функцию, 
  char (*prt)(unsigned int);
  prt=func1;// func инициализируется адресом
  (*prt)(x);///вызов.
  cout<<func1(x)<<'\n';
 
  char(*prt1)(int , float , double );
  prt1=func2;
  (*prt1)(q,w,e);
 cout<<func2(q,w,e)<<'\n';
 
system("pause");
  return 0;
}
Если запустить вот этот код то выведет только символ "а".
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.02.2013, 23:58     Указатели на Функции #13
Они и так возвращаются, но не каждое число можно вывести видимым символом. Измените код так:
C++
1
cout << "(*prt1)(q, w, e) = " << (int)(*prt1)(q, w, e) << endl;
И увидите, что должен быть выведен символ с кодом 8(управляющий символ). Такого видимого символа нет, поэтому выводит пустоту.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2013, 23:31     Указатели на Функции
Еще ссылки по теме:

Указатели и массивы. Указатели и функции C++
Указатели на функции C++
Указатели на массивы. Указатели и функции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
04.03.2013, 23:31  [ТС]     Указатели на Функции #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <iostream>
 
using namespace std;
////ÎáüÿâëåГ*ГЁГҐ          
char func1(unsigned int*);
char func2(int*,float*,double*);
char func3 (void); 
int  func4 (char*,int*);
////ÓêГ*Г§Г*òåëü
char(*prt)(unsigned int*)=func1;
char(*prt1)(int*,float*,double*)=func2;
char(*prt2)(void)=func3;
int(*prt3)(char*,int*)=func4;
 
int main()
{
    unsigned int a1=5,*pa1;
    pa1=&a1;
   int a2=2,*pa2;
   pa2=&a2;
   float a3=2,*pa3;
   pa3=&a3;
   double a4=2,*pa4;
   pa4=&a4;
   char a5=3,*pa5;
   pa5=&a5;
    
    
    cout<<"Rezultat 1 funkcii" <<"  "<<(int)(*prt)(pa1)<<'\n';
     cout<<"Rezultat 2 funkcii" <<"  "<<(int)(*prt1)(pa2,pa3,pa4)<<'\n';
     cout<<"Rezultat 3 funkcii" <<"  "<<(int)(*prt2)()<<'\n';
      cout<<"Rezultat 4 funkcii" <<"  "<<(int)(*prt3)(pa5,pa2)<<'\n';
     
    system("PAUSE");
    return 0;
}
 
char func1(unsigned int *a)
     {
     return *a;
     }
 
char func2(int *a,float*b,double*c)
{
        return *a + *b + *c;
}
 
char func3(void)
{
    int a;
    cout<<"Vedite znachenie a = ";
    scanf ("%d", &a);
    return a*a*a;
}
 
int func4(char *a,int*b)
{
    return *a* *b;
}
Yandex
Объявления
04.03.2013, 23:31     Указатели на Функции
Ответ Создать тему
Опции темы

Текущее время: 14:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru