Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / передача функцией n - значений / 19 сообщений из 19, страница 1 из 1
05.08.2020, 13:29
    #39986674
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
Добрый день .
имеем классический Си без плюсов !!!

Вот как передать в функцию n параметров прекрасно всем известно и много где описано.
а вот как возвратить функцией n значений наподобие scanf ?
у меня что-то не получается. в какую сторону копнуть ?
...
Рейтинг: 0 / 0
05.08.2020, 13:33
    #39986679
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
std::tuple
...
Рейтинг: 0 / 0
05.08.2020, 13:34
    #39986680
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
Cerebrum
std::tuple


спасибо, но надо в предположении , что имеем только древний C . без плюсов. сейчас подправлю головной вопрос.
...
Рейтинг: 0 / 0
05.08.2020, 13:43
    #39986684
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
andron81,

В С++ при возврате объекта место под него выделяется в вызывающей функции и его адрес передается неявным параметром в функцию, и там инициализируется .
В С это просто нужно делать явно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
struct Result { int a; int b;};

struct Result* fun(struct Result* res)
{
       res->a = 1;
       res->b = 2;  
       return res;
}
int caller(void)
{
       struct Result* res = fun(malloc(sizeof struct Result));
       int ret = res->a + res->b;
       free(res);
       return ret;
}
...
Рейтинг: 0 / 0
05.08.2020, 13:45
    #39986686
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
В параметрах передавай буфер и его размер, возвращай количество заполненных элементов.
Например по аналогии с recv()
...
Рейтинг: 0 / 0
05.08.2020, 13:46
    #39986687
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
Anatoly Moskovsky
andron81,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
struct Result { int a; int b;};

struct Result* fun(struct Result* res)
{
       res->a = 1;
       res->b = 2;  
       return res;
}
int caller(void)
{
       struct Result* res = fun(malloc(sizeof struct Result));
       int ret = res->a + res->b;
       free(res);
       return ret;
}




то есть scanf так устроен ?
...
Рейтинг: 0 / 0
05.08.2020, 13:52
    #39986697
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
andron81
то есть scanf так устроен ?

scanf использует явный возврат каждого значения через отдельные аргументы.
...
Рейтинг: 0 / 0
05.08.2020, 13:53
    #39986698
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
andron81а вот как возвратить функцией n значений наподобие scanf ?

Точно так же, как это делает scanf: передать параметрами n указателей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.08.2020, 14:03
    #39986709
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
Dimitry Sibiryakov

andron81а вот как возвратить функцией n значений наподобие scanf ?

Точно так же, как это делает scanf: передать параметрами n указателей.

И дополнительную информацию: сколько указателей и каких они типов (если типы могут быть разными).
...
Рейтинг: 0 / 0
05.08.2020, 14:15
    #39986722
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
petravИ дополнительную информацию: сколько указателей и каких они типов (если типы могут быть
разными).
Ну да, всё как написано в "man scanf".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.08.2020, 14:26
    #39986726
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
дополню:
если в дополнение к указателям использовать структуры данных, то возможности практически безграничны
например, если ваша функция вернет указатель на массив, то это даст доступ ко всем элементам массива.

Вот эта функция добавляет новый элемент в связанный список и возвращает указатель на первый элемент списка,
кроме того, функция косвенно модифицирует operations status (success, failure)
Код: plaintext
1.
struct node *insert_first(struct node *start, int val, short *op_status)
...
Рейтинг: 0 / 0
05.08.2020, 14:35
    #39986735
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
Dimitry Sibiryakov

andron81а вот как возвратить функцией n значений наподобие scanf ?

Точно так же, как это делает scanf: передать параметрами n указателей.

вот это меня навело на мысль.

а вот ф-я которая согласно шаблону (шаблон может представлять собой "строку", состоящей только из %d) возвращает в int-вые переменные значения 555.
Количество переменных неограниченно.

Код: plaintext
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.
void returnNValue(const char* fmt, ...)
{
    const char* p = NULL;
    char c;
    int *intVal;
    va_list ap;
    va_start(ap, fmt);
    for (p = fmt; *p; p++) {
        if (*p != '%') continue;
        c = *++p;
        switch (c) {
        case 'd' :
            intVal = va_arg(ap, int*);
            *intVal = 555;

        }


    }
    va_end(ap);
}
void main()
{
    int d1, d2, d3, d4, d5, d6;
    returnNValue("%d%d%d%d%d%d", &d1, &d2, &d3, &d4, &d5, &d6);
//все переменные обретают значение 555 
}
...
Рейтинг: 0 / 0
05.08.2020, 14:43
    #39986739
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
andron81,

нда уж Си это , конечно, нечто. это вам не школяцкий пхп, блин
...
Рейтинг: 0 / 0
05.08.2020, 14:44
    #39986740
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
andron81,

В таком случае формат тебе не нужен. В первом аргументе передай количество int-ов.
...
Рейтинг: 0 / 0
05.08.2020, 14:49
    #39986747
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
petrav
andron81,

В таком случае формат тебе не нужен. В первом аргументе передай количество int-ов.


не нужен. но задача стоит более сложная. просто я упростил, чтобы понять
...
Рейтинг: 0 / 0
05.08.2020, 14:55
    #39986753
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
andron81вот это меня навело на мысль.

Внезапно! Сенсация! Чтение документации наводит на мысли! Кто бы мог подумать?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.08.2020, 15:02
    #39986761
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
Dimitry Sibiryakov

andron81вот это меня навело на мысль.

Внезапно! Сенсация! Чтение документации наводит на мысли! Кто бы мог подумать?..


да я только K&R пока располагаю. а документацией пользоваться я пока не умею )))))
...
Рейтинг: 0 / 0
07.08.2020, 08:58
    #39987338
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
можно закрывать
...
Рейтинг: 0 / 0
07.08.2020, 09:32
    #39987353
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача функцией n - значений
Закрыто.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / передача функцией n - значений / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]