Последовательность указателей на вещественные переменные, ограниченная NULL - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Последовательность указателей на вещественные переменные, ограниченная NULL.. Функция возвращает динамический массив указателей на эти переменные. Написала с помощью макросов va-list,вроде понятно как они работают,но почему то ограничение не срабатывает...что я делаю неправильно?
double mass(double*n...)
{
    va_list arg;
    double *c = (double*)malloc(10 * sizeof(double));
    /* инициализация argptr */
    va_start(arg, n);
    for (int i = 0; n > NULL; n++, i++)
        {
            *n = va_arg(arg, double);
            c[i] = *n;
        }
    /* завершение */
    va_end(arg);
    return *c;
}
void main()
{
    double q = 5.6, r = 6.7, t = 3.4;
    double*a = &q;
    double*s = &r;
    double*d = &t;
 
    mass(a, s, d,NULL);
}
ограничение же пишется в конце аргументов вызовов,правильно? Думаю ошибка в main....

Решение задачи: «Последовательность указателей на вещественные переменные, ограниченная NULL»

textual
Листинг программы
#include "stdafx.h"
#include <iostream>
#include <stdarg.h>
#define SIZE 3
double *mass(int num...)
{
    va_list arg;
    double *c = (double*)malloc(num * sizeof(double));
    /* инициализация argptr */
    va_start(arg, num);
    for (int i = 0; i<num; i++)
    {
        c[i] = *va_arg(arg, double*);
    }
    /* завершение */
    va_end(arg);
    return c;
}
 
int main()
{
    double q = 5.6, r = 6.7, t = 3.4;
    double*a = &q;
    double*s = &r;
    double*d = &t;
    //f(NULL);
    double *tmp;
    tmp = mass(SIZE, a, s, d);
    for (int i = 0; i <SIZE; i++) std::cout << tmp[i]<<std::endl;
    system("PAUSE");
    return 0;

Объяснение кода листинга программы

  1. Подключение необходимых заголовочных файлов
  2. Определение функции mass, принимающей переменное количество аргументов типа int
  3. Инициализация переменной arg для работы с переменным числом аргументов
  4. Выделение памяти под массив из num элементов типа double с помощью malloc
  5. Инициализация элементов массива с помощью цикла for и функции va_arg, которая получает следующий аргумент
  6. Возвращение выделенного массива
  7. Создание трех указателей на переменные типа double в функции main
  8. Вывод на экран значений массива с помощью цикла for и оператора std::cout
  9. Ожидание нажатия клавиши с помощью system(PAUSE)
  10. Возврат 0, означающий успешный конец работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы