Последовательность указателей на вещественные переменные, ограниченная 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;
Объяснение кода листинга программы
- Подключение необходимых заголовочных файлов
- Определение функции
mass, принимающей переменное количество аргументов типа int - Инициализация переменной
argдля работы с переменным числом аргументов - Выделение памяти под массив из
numэлементов типа double с помощьюmalloc - Инициализация элементов массива с помощью цикла for и функции
va_arg, которая получает следующий аргумент - Возвращение выделенного массива
- Создание трех указателей на переменные типа double в функции
main - Вывод на экран значений массива с помощью цикла for и оператора
std::cout - Ожидание нажатия клавиши с помощью
system(PAUSE) - Возврат 0, означающий успешный конец работы программы