Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Maxak
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
#1

Как в функции создать два массива и передать их в другую функцию - C++

07.08.2013, 15:26. Просмотров 660. Ответов 8
Метки нет (Все метки)

Как в функции создать два массива и передать их в другую функцию, например в main()?
Так хорошо делать?
Кликните здесь для просмотра всего текста

C++
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
double * Func(double *B, .....)
{
 int N= Func2();
   double *A = New double[N];
   B = New double [N];
   for(int i =0; i<N;i++)
{
A[i] = Func3(...);
B[i] = Func4(...);
 
}
 
   return A;
 
}
int main()
{
 
double *B;
double *A=Func(B);
//и задесь могу как угодно извращаться над массивами A, B? а в конце не забуду написать:
delete[] A;
delete[] B;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 15:26     Как в функции создать два массива и передать их в другую функцию
Посмотрите здесь:

Как передать значение функции класса в другую функцию? - C++
имеется класс class Test { public: int getB() { return B; } void setB(int b) { B = b; } private: ...

Как передать матрицу, полученную в одной функции, в другую функцию? - C++
как передать матрицу ,которую мы получили в одной функции в другую функцию? Написала функции для обработки матриц,но компилятор...

Передать значение из функции main в другую функцию - C++
int Func(){ int a, b=10; int c=a+b; return c; } int main(){ int a=5; return 0;

Можно ли в качестве параметра функции передать другую функцию? - C++
В ниже представленной программе функция returnMax находит в массиве максимальный элемент и возвращает его. returnMin - делает тоже самое,...

Передать значение из одной функции в другую функцию в связном списке - C++
Как можно передать значение из одной функции в другую функцию в связном списке? Например у меня есть функция поиска максимального...

Не могу разобраться как передать корректно передать массив из функции в функцию - C++
//--------------------------------------------------------------------------- #pragma hdrstop ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6419 / 3058 / 302
Регистрация: 04.12.2011
Сообщений: 8,332
Записей в блоге: 3
07.08.2013, 15:45     Как в функции создать два массива и передать их в другую функцию #2
Цитата Сообщение от Maxak Посмотреть сообщение
//и задесь могу как угодно извращаться над массивами A, B? а в конце не забуду написать:
И будет самодельное горе.
Но никто к этому не принуждает. Вы можете выяснять размеры и выделять память в той области определения, где и удаляете, а инициализировать и обрабатывать где угодно. Или не забывать. Для этого функцию возвращающие указатель на динамический массив можно снабдить сигнатурой с "антисклеротическим" именем вроде:
C++
1
2
3
4
5
6
 int *fn_ret_ptr_by_NEW_arr(int &szArr);
//или
void fn_ret_ptr_by_NEW_arr(int *arr, int &szArr);
//что менее наглядно в месте вызова и не отражает явно инициализации указателя, 
//то есть хуже, но это вопрос памяти
//(размер тоже надо вернуть, по ссылке например))
Maxak
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
07.08.2013, 16:25  [ТС]     Как в функции создать два массива и передать их в другую функцию #3
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вы можете выяснять размеры и выделять память в той области определения, где и удаляете, а инициализировать и обрабатывать где угодно.
Что бы выяснить размеры, потребуется отдельная функция.
Кстати по поводу инициализации. В процессе выполнения выскакивает такая ошибка Run-Time Check Failure #3 - The variable 'A' is being used without being initialized.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Func(double * A)
{
A = new double[2];
A[0] =1; A[1]=2;
return 2;
}
int main()
{
double *A;
int jjj=Func(A);
 
return 0
}
Получается, так как я писал выше делать нельзя. Как же тогда быть? (допустим размер массива A может быть определен только внутри Func())
Т.е. до вызыва функции мне нужно чем то инициализировать A?
ching0n
3 / 3 / 1
Регистрация: 06.08.2013
Сообщений: 23
07.08.2013, 18:46     Как в функции создать два массива и передать их в другую функцию #4
Maxak, можно проще сделать. Объявить два глобальных массива, а функцию "Func" сделать пустышкой (void). Внутри этой функции вы будете изменять значение двух глобальных массивов. А уже в самой программе (функции main) ссылаться на те два глобальных массива. То бишь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int a[3], b[5];
 
void func(double a)
{
    ...
    a[0] = ... ; b[0] = ... ; a[1] = ... и т.д.
}
int main()
{
    ...
    func();
    // и пользоваться этими двумя массивами a и b
}
coloc
07.08.2013, 18:50
  #5

Не по теме:

ching0n, можно сразу на Brainfuck-е кодить...

IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6419 / 3058 / 302
Регистрация: 04.12.2011
Сообщений: 8,332
Записей в блоге: 3
07.08.2013, 22:28     Как в функции создать два массива и передать их в другую функцию #6
Цитата Сообщение от Maxak Посмотреть сообщение
допустим размер массива A может быть определен только внутри Func()
Ну и пусть вернёт размер. Указатель ей не передавайте и не создавайте там массив и всё.
Что касается динамических массивов, то их инициализация при выделении памяти невозможна. Одиночную переменную можно инициализировать при выделении. Массив же вы должны заполнять присваиванием, после выделения памяти. То есть инициализируется динамический массив мусором и это нормально. О чем толкует Ваш компилятор не понял. Дайте код с нумерацией и полное сообщение об ошибке.
Ага, - вот:
Цитата Сообщение от Maxak Посмотреть сообщение
такая ошибка Run-Time Check Failure #3 - The variable 'A' is being used without being initialized.
Перед передачей указателя в функцию нулём его инициализируйте.
Maxak
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
08.08.2013, 10:06  [ТС]     Как в функции создать два массива и передать их в другую функцию #7
Цитата Сообщение от ching0n Посмотреть сообщение
Maxak, можно проще сделать. Объявить два глобальных массива, а функцию "Func" сделать пустышкой (void). Внутри этой функции вы будете изменять значение двух глобальных массивов. А уже в самой программе (функции main) ссылаться на те два глобальных массива. То бишь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int a[3], b[5];
 
void func(double a)
{
    ...
    a[0] = ... ; b[0] = ... ; a[1] = ... и т.д.
}
int main()
{
    ...
    func();
    // и пользоваться этими двумя массивами a и b
}
Та все дело в том, что я не знаю размеров массивов, я их могу узнать только внутри func()/....
Maxak
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
08.08.2013, 10:24  [ТС]     Как в функции создать два массива и передать их в другую функцию #8
Цитата Сообщение от IGPIGP Посмотреть сообщение
О чем толкует Ваш компилятор не понял.
кстати ошибка вылетает не на этапе компиляции, а при выполнении программы.Попробуйте, пожалуйста у себя запустить этот код, мне кажется дело может быть действительно в компиляторе.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
int Func(double * A)
{
    A = new double[2];
    A[0] =1; A[1]=2;
return 2;
}
 
int main()
{
    double *AA;
    int jjj=Func(AA);
    cout<<" A[] = " << AA[0]<<" ; "<< AA[1];
    delete [] AA;
 
 
    char quit;
    cin>>quit;
    return 0;
}


кстати
C++
1
double *AA = 0;
такой вариант ничего хорошего не дает.
Ошибка вида:
Код
Unhandled exception at 0x00f4f82c in Matrix_test.exe: 0xC0000005: Access violation reading location 0x00000008.
Ну оно и понятно, не можем же мы в произвольный адрес памяти писать, как я понимаю?

C++
1
double xx= 0; double *AA = &x;
а такой когд выдает ассерт, и в массив AA ничего хорошего не записывается.
Миниатюры
Как в функции создать два массива и передать их в другую функцию  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 12:28     Как в функции создать два массива и передать их в другую функцию
Еще ссылки по теме:

Как передать массив из одной функции в другую - C++
Ребят помогите с массивами,алгоритм составил а с языком пока на &quot;ВЫ&quot;. как таскать массив из процедуры в процедуру. перехожу с паскаля...

Как переменную из одной функции передать в другую? - C++
у меня надо переменную index из функции maxi передать в функцию summa #include &quot;stdafx.h&quot; #include &quot;math.h&quot; #include &quot;iostream&quot; ...

Как передать значение из одной функции в другую? - C++
Как передать значение s из функции main() в функцию poisk()? Как передать значение i из функции poisk() в функцию main()? Если...

Как передать массив из одной функции в другую? - C++
Нужна помощь. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int vod(int a) { int a, i; for (i = 0; i &lt; 12;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6419 / 3058 / 302
Регистрация: 04.12.2011
Сообщений: 8,332
Записей в блоге: 3
08.08.2013, 12:28     Как в функции создать два массива и передать их в другую функцию #9
Maxak, да, если указатель не указывает на выделенную память, а используется для выделения, то нужно его передать по указателю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#include <iostream>
using namespace std;
 int Func(int ** A)
{
    *A = new int[2];
    (*A)[0] =1; (*A)[1]=2;
return 2;
}
 
int main()
{
    int *AA=0;
    int jjj=Func(&AA);
    cout<<" A[] = " << AA[0]<<" ; "<< AA[1];
    delete [] AA;
     cout<<endl;
    cin.get();
    return 0;
}
Но гораздо лучше сначала получить размер, а потом выделить и инициализировать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int FuncRetSize(/* всё что ей нужно */)
{
 //как то выяснятся что 2 например   
return 2;
}
void FuncFillArr(double *AA, int n)
{
    for( int i = 0 ; i < n ;  ++i ) AA [i]  = i + 1;
return ;
} 
int main()
{
     int jjj=FuncRetSize();
    double *AA = new double[jjj];//
FuncFillArr(AA, jjj);
    cout<<" A[] = " << AA[0]<<" ; "<< AA[1];
    delete [] AA;//
     cout<<endl;
    cin.get();
    return 0;
}
тогда просто указатель можно.
Yandex
Объявления
08.08.2013, 12:28     Как в функции создать два массива и передать их в другую функцию
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru