почему такая программа
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)
Адресовать массив как известно, можно по вызову имени
передача массивов в функцию
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
- Romeo
- Сообщения: 3091
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Как у тебя вообще этого код компилируется? В соответствии с сигнтурой diff должна возвращать double, но не возвращает.
После изменения возвращаемого double на void - всё компилируется и прекрасно работает. У меня ничего не валится.
После изменения возвращаемого double на void - всё компилируется и прекрасно работает. У меня ничего не валится.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Если в функцию нужно передавать данные в виде нескольких массивов и принимать данные тоже через массив, то лучше массивы объединить в структуру, а в функцию передавать только указатель или ссылку на эту структуру.
-
- Сообщения: 1213
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Массивы и так передаются как указатели. С/C++ запихиванием массивов в стек не занимается.WinMain писал(а):Если в функцию нужно передавать данные в виде нескольких массивов и принимать данные тоже через массив, то лучше массивы объединить в структуру, а в функцию передавать только указатель или ссылку на эту структуру.
Эти декларации эквивалентны:
Код: Выделить всё
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
- Откуда: Крым, Севастополь
- Контактная информация:
Absurd абсолютно прав! Мне даже нечего добавить.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.