powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / передача функцией n - значений
19 сообщений из 19, страница 1 из 1
передача функцией n - значений
    #39986674
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день .
имеем классический Си без плюсов !!!

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


спасибо, но надо в предположении , что имеем только древний C . без плюсов. сейчас подправлю головной вопрос.
...
Рейтинг: 0 / 0
передача функцией n - значений
    #39986684
Фотография 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;
}
...
Рейтинг: 0 / 0
передача функцией n - значений
    #39986686
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В параметрах передавай буфер и его размер, возвращай количество заполненных элементов.
Например по аналогии с recv()
...
Рейтинг: 0 / 0
передача функцией n - значений
    #39986687
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
передача функцией n - значений
    #39986697
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81
то есть scanf так устроен ?

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

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

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

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

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

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

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

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

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


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

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

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

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


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


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