Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Praud
7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
1

Передача функции в функцию

15.03.2013, 18:42. Просмотров 1052. Ответов 8
Метки нет (Все метки)

Как реализовать передачу функции в функцию?

Создал функцию take_off(LIST *lst, int *err)
Теперь нужно сделать чтобы эта функция работала в другой
к примеру job
Какие аргументы должны быть у job?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 18:42
Ответы с готовыми решениями:

Передача данных из функции в функцию
#include <stdio.h> #include <stdlib.h> #include <math.h> float katet(float a, float b) { ...

Передача указателя из функции в функцию двумерного массива и его вывод на экран
Я, пишу морской бой для академии, в написании, нужно использовать указатели. Я столкнулся с...

Передача функции в качестве аргумента другой функции
в книге Харви и Пол Дейтл нашел следующий вариант решения задачи, передачи функции в качестве...

Передача в функцию
Правильно ли я передаю arg в функцию listInsert? Нет возможности проверить. Ниже структура и фунция...

Передача массива в функцию
Здравствуйте. Код читает матрицу из файла и записывает ее в динамический массив и выводит на экран....

8
WriterASD
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 49
15.03.2013, 18:53 2
ну берёте просто и вызываете take_off в job как обычную функцию, в чём проблема
0
Praud
7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
15.03.2013, 19:05  [ТС] 3
Ясно, спасибо. Но тогда вопрос почему err не видит?

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
78
79
80
81
82
83
84
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include "malloc.h"
 
typedef struct listnode
{
    int data;
    struct listnode *next;
}LIST;
 
LIST *create_list();
LIST *head;
void display(LIST *lst);
int take_off(LIST *lst, int *err);
void job(LIST *lst, int take_off(LIST *lst, int *err));
 
int main()
{
    create_list();
    display(head);
    job(head);
    _getch();
    return 0;
}
 
LIST *create_list()
{
    int item;
    char c;
    LIST *current, *prev;
    head=prev=current=(LIST*)malloc(sizeof(LIST*));
    printf("Item:\n");
    scanf_s("%d", &item);
    current->data=item;
do
{
    current=(LIST*)malloc(sizeof(LIST*));
    printf("Item: \n");
    scanf_s("%d", &item);
    current->data=item;
    prev->next=current;
    prev=current;
    printf("End of list?\n");
    c=_getch();
}while(c!='y');
    current->next=NULL;
    return head;
}
 
void display(LIST *lst)
{
    LIST *cur=lst;
 
    while(cur)
    {
    printf("%d-->", cur->data);
    cur=cur->next;
    }
    printf("NULL");
}
 
int take_off(LIST *lst, int *err)
{
    int value=0;
    LIST *old_header=lst;
 
    if(lst)
    {
        value=old_header->data;
        lst=lst->next;
        free(old_header);
        *err=0;
    }
    else
        *err=1;
 
    return value; 
}
 
void job(LIST *lst)
{
    [COLOR="Red"]take_off(lst , &err); // err не определяет[/COLOR]
}
Добавлено через 4 минуты
Немного разобрался.
Сделал int err в job(e)

Но все равно не работает. Компилиться, но потом вылетает.
0
WriterASD
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 49
15.03.2013, 19:13 4
Praud, сделайте трассировку, посмотрите что как
0
Praud
7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
15.03.2013, 19:18  [ТС] 5
толку с трассировки если после перехода в функцию job оно вылетает?
Тут не при определенных обстоятельствах, а всегда.
0
WriterASD
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 49
15.03.2013, 19:28 6
Praud, в смысле вылетает? делайте шаг с заходом, даже если вылетает должна какая-то ошибка высвечиваться
0
Игорь с++
474 / 466 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
15.03.2013, 21:13 7
Всё должно работать как вам сказали ! Хоти те убидиться ? Скомпилируй те вот этот код -
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
#include <stdio.h>
#include <stdlib.h>
 
void Func1();
void Func2();
 
int main(int argc, char *argv[])
{
  
  Func2();
  
  system("PAUSE");  
  return 0;
}
 
void Func1(){
     
printf("I'm Func1\n");
     
     }
     
void Func2(){
     
     Func1();
     
printf("I'm Func2\n");
     
     }
0
WriterASD
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 49
15.03.2013, 21:33 8
Praud, вы наверное думаете, что параметр одной функции будет доступен в другой функции как глобальная переменная, если вызывать её из первой. Так вот, это бред. А если вы спроектировали программы с учётом такого, то это очень плохо ( с точки зрения понимания и обслуживания кода).
Каждая функция имеет доступ только к своим параметрам, к локальным переменным, объявленным внутри функции и к глобальным переменным(это такие переменные, которые вообще вне функций объявлены). Отдавать наружу данные функция может только через return, через глобальные переменные и через область памяти, на которую ей были переданы указатели.

Добавлено через 24 секунды
Прошу прощения, если я не так вас понял.
0
ЦарьКащей
Ты за кого меня держиш!?
21 / 22 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
17.03.2013, 19:00 9
На место прототипов поставь сами функции, а прототипы убери. Переменную err сделай глобальной и убери из параметров, а если нужна в качестве параметра то в параметре сделай переменную с другим именем и тем же типом и передавай переменную, а не указатель на неё.
0
17.03.2013, 19:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 19:00

Передача параметров в функцию
Потихонечку изучаю Си. Решил написать программку которая должна переводить из dec в hex/bin. ...

Передача структуры в функцию
Не могу понять, что делаю не так при передаче структуры в функцию. Подскажите, пожалуйста.#define...

Передача массива в функцию.
Здравствуйте) Не могли бы Вы мне помочь с такой задачей: напишите функцию с именем sumarray(),...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru