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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
eugira
Сообщения: 14
Зарегистрирован: 16 ноя 2006, 18:48

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)
Адресовать массив как известно, можно по вызову имени
Е.Багоцкий
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

02 июл 2007, 17:40

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

После изменения возвращаемого double на void - всё компилируется и прекрасно работает. У меня ничего не валится.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

02 июл 2007, 22:13

Если в функцию нужно передавать данные в виде нескольких массивов и принимать данные тоже через массив, то лучше массивы объединить в структуру, а в функцию передавать только указатель или ссылку на эту структуру.
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

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]);
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

03 июл 2007, 13:17

Absurd абсолютно прав! Мне даже нечего добавить.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить