Последовательность указателей на вещественные переменные, ограниченная 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, означающий успешный конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д