передача массивов в функцию

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: передача массивов в функцию

Re: передача массивов в функцию

Romeo » 03 июл 2007, 13:17

Absurd абсолютно прав! Мне даже нечего добавить.

Re: передача массивов в функцию

Absurd » 03 июл 2007, 01:40

WinMain писал(а):Если в функцию нужно передавать данные в виде нескольких массивов и принимать данные тоже через массив, то лучше массивы объединить в структуру, а в функцию передавать только указатель или ссылку на эту структуру.
Массивы и так передаются как указатели. С/C++ запихиванием массивов в стек не занимается.

Эти декларации эквивалентны:

Код: Выделить всё

double diff1(double* x1,double* x2,double* v);

double diff2(double x1[],double x2[],double v[]);

double diff3(double x1[3],double x2[3],double v[3]);

Re: передача массивов в функцию

WinMain » 02 июл 2007, 22:13

Если в функцию нужно передавать данные в виде нескольких массивов и принимать данные тоже через массив, то лучше массивы объединить в структуру, а в функцию передавать только указатель или ссылку на эту структуру.

Re: передача массивов в функцию

Romeo » 02 июл 2007, 17:40

Как у тебя вообще этого код компилируется? В соответствии с сигнтурой diff должна возвращать double, но не возвращает.

После изменения возвращаемого double на void - всё компилируется и прекрасно работает. У меня ничего не валится.

передача массивов в функцию

eugira » 02 июл 2007, 16:13

почему такая программа
double diff(double x1[3],double x2[3],double v[3])
{
v[0]=x2[0]-x1[0];
v[1]=x2[1]-x1[1];
v[2]=x2[2]-x1[2];
}
int main(int argc, char* argv[])
{
double w1[3],w2[3];
double v0[3]={26000004.12,15,-1};
double v1[3]={1,-67889799.13456,2888899};
double y[3]={0,10000,0};
diff(v0,y,w2);
diff(v0,v1,w1);
return 0;
}
валится при повторном вызове diff?
Вроде стандартный способ передачи массивов
Не помогает замена double diff(double *x1,double *x2,double *v)
Адресовать массив как известно, можно по вызову имени

Вернуться к началу