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

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

Восстановить пароль Регистрация
 
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
18.12.2012, 19:10     Указатели функций #1
Есть задание :

C++
1
2
3
4
void *func1(void *a, int *b);
void *func2(int a, int *b);
void *func3(void);
int *func4(char *S1, int *a,...);
Напишите пожалуйста хоть как примерно с этим работать.

И почему
C++
1
*func2(int a, int *b)
должно возвращать значение. Я думал что функции типа void не должны возвращать значения.

Вообще не понимаю как и что делать.
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 <iostream>
using namespace std;
 
void *func1(void *a, int *b);
void *func2Sum(int a, int *b);
void *func3(void);
int *func4( char *S1, int *a,...);
 
 
int main(){
 
    int a=50;
    int *b,pb=5;
    void *f;
    b=&pb;
    
    f=func2Sum(a,b);
    
 
    
    
    cout<<endl;
    system("pause");
    return 0;
}
 
void *func2Sum(int a, int *b){
    
    int *res,pres;
    res=&pres;
    *res=a+(*b);
    
    return res;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 19:10     Указатели функций
Посмотрите здесь:

Указатели, адресная арифметика и передача аргументов функций по значению и по ссылке C++
функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. C++
C++ Использование функций и шаблонов функций
C++ Объявление функций внутри других функций
C++ Использование функций и шаблонов функций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
18.12.2012, 19:17     Указатели функций #2
Это выдаст ошибку. void ничего не возвращает.

Цитата Сообщение от Jony Wocker Посмотреть сообщение
void *func2Sum(int a, int *b)
{
return res;
}
Добавлено через 50 секунд
так же непонятна суть темы. Что нужно?
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
18.12.2012, 19:25  [ТС]     Указатели функций #3
Цитата Сообщение от Afflicted Посмотреть сообщение
Это выдаст ошибку. void ничего не возвращает.



Добавлено через 50 секунд
так же непонятна суть темы. Что нужно?
В том-то и дело. Сначала я писал без возврат,но компилятор выдал ошибку:
error C4716: 'func2Sum' : must return a value


Суть задания научиться пользоваться указателями.
Написать программу используя функции которые я описывал выше.

Нашел информацию по этой теме.
Добавлено через 31 секунду
http://ermak.cs.nstu.ru/cprog/html/093.htm
WhiteP
605 / 203 / 23
Регистрация: 20.11.2012
Сообщений: 419
18.12.2012, 19:43     Указатели функций #4
C++
1
2
3
4
void *func1(void *a, int *b);
void *func2(int a, int *b);
void *func3(void);
int *func4(char *S1, int *a,...);
Это не указатели на функции, а функции, возвращающие указатель.

C++
1
2
3
4
5
6
7
8
void *func2Sum(int a, int *b){
    
    int *res,pres;
    res=&pres;
    *res=a+(*b);
    
    return res;
}
Функция возвращает указатель на void (т.е. указатель на нечто). В данном случае возвращается адрес локальной переменной, чего делать нельзя.
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
18.12.2012, 21:40  [ТС]     Указатели функций #5
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <stdarg.h>
using namespace std;
 
void (*func1)(float *, int *);
void (*func2)(int , int *);
void (*func3)(void);
int  (*func4)(int ,...);
 
void sum(float *,int *);
void mull(int ,int *);
void mass(void);
int sred_znach(int ,...);
 
int main(void){
    
    int *pia,*pib;
    int ia=6,ib=4;
    
    float *pfa;
    float fa=5.4;
 
    pfa=&fa;
    pib=&ib;
    
    func1=sum;
    func2=mull;
    func3=mass;
    func4=sred_znach;
 
    (*func1)(pfa,pib);
    (*func2)(ia,pib);
    (*func3)();
    
    int n;
    n=(*func4)(ia,ib,4,6,7,10);
    cout<<endl<<endl<<"Sred znach= "<<n;
    
    cout<<endl;
    system("pause");
    return 0;
}
 
 
void sum(float *a,int *b){ cout<<endl<<"sum= "<<(*a)+(*b);};
void mull(int a,int *b){ cout<<endl<<"Mull= "<<a*(*b); };
void mass(void)
{
    int a[10];
    cout<<endl<<endl<<"Massiv a: "; 
    for(int i=0;i<10;i++) 
    {
        a[i]=rand()%100-40;
        cout<<a[i]<<" ";
    }
    cout<<endl<<endl;
}
int sred_znach(int x,...)
{
    
    
    int i=0,  j=0,  sum=0;
    va_list uk_arg;
    va_start(uk_arg,x);  
    
    if (x!=-1) sum=x;    
    else return (0);
    j++;
    while ( (i=va_arg(uk_arg,int))!=-1)
        
    {                            
        sum+=i;                    
        j++;
    }
    va_end(uk_arg);         
    return (sum/j);
}
Jony Wocker
45 / 45 / 2
Регистрация: 19.11.2009
Сообщений: 362
18.12.2012, 21:42  [ТС]     Указатели функций #6
Вот что вышло.
Миниатюры
Указатели функций  
Yandex
Объявления
18.12.2012, 21:42     Указатели функций
Ответ Создать тему
Опции темы

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