Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как правильно передать масив в арг. функции вызове


Автор: maxi2 13.6.2014, 15:54
Код
#include "math.h"
#include <iostream>

using namespace std;
float alpha=3.14/3;
float A[2]={2*sqrt(3),-4};
float B[2]={sqrt(3),0};

void coordynat (float t[]) {
    float * c;
    c[0]=t[0]*cos(alpha)-t[1]*sin(alpha);
    c[1]=t[0]*sin(alpha)+t[1]*cos(alpha);
    cout << "Prezhniye coordinaty tochky"<<"("<<t[0]<<";"<<t[1]<<"----"<<c[0]<<","<<c[1]<<endl;
                         };

int main()
{
    cout << coordynat (A)<< "\n"<<endl;
    return 0;
}


Добавлено @ 15:58
cout << coordynat (A)<< "\n"<<endl--если так то вызвывается еще один файл с ошибками,
а если как указатель cout << coordynat (*A)<< "\n"---
Цитата
|18|error: cannot convert 'float' to 'float*' for argument '1' to 'void coordynat(float*)'|


Модератор: Не забываем пользоваться кнопочкой "Код"

Автор: Фантом 13.6.2014, 16:35
Начнем с конца. Функция coordynat ничего не возвращает, поэтому смысл попытки вывода ее результата совершенно неясен.

Далее. Каков глубокий смысл объявления массива c через указатель? Если хотелось выпендриться, то надо было выпендриваться до конца и не забывать выделить память для массива, а не просто объявить указатель на него и сразу писать в его элементы что-то.

Автор: EgoBrain 17.6.2014, 06:21
maxi2, в http://forum.vingrad.ru/forum/topic-378167.html есть про то, как передать адрес первого элемента массива в функцию для работы с этим массиом, и как передать указатель на массив, который будет создан в функции, а затем использован далее в программе.
А вообще лучше так сильно не абстрогируйся от предмета, оно не поможет, нужно знать как оно на самом деле. То есть оперируй не понятием массив, а понятием память и работа с ней.

Автор: ProstoMax 18.6.2014, 11:32
Код
#include "math.h"
#include <iostream>

using namespace std;
float alpha = 3.14 / 3;
float A[2] = { 2 * sqrt(3), -4 };
float B[2] = { sqrt(3), 0 };
float coordynat(float t[]);


int main()
{
    
    cout << coordynat(A) << "\n" << endl;
    cin.get();
    return 0;
}
float coordynat(float t[]) {
    
    float * c = new float;
    c[0] = t[0] * cos(alpha) - t[1] * sin(alpha);
    c[1] = t[0] * sin(alpha) + t[1] * cos(alpha);
    cout << "Prezhniye coordinaty tochky" << "(" << t[0] << ";" << t[1] << "----" << c[0] << "," << c[1] << endl;
    return *c;
    delete c;
};


Как то так...

Автор: k0rvin 18.6.2014, 12:16
Цитата(ProstoMax @  18.6.2014,  11:32 Найти цитируемый пост)
Как то так...
Код

float coordynat(float t[]) {
    float * c = new float;
    ...
    c[1] = ...



Добро пожаловать за границу массива.

Добавлено через 9 минут и 18 секунд
http://ideone.com/CNl0ln

Автор: xvr 18.6.2014, 13:35
Цитата(ProstoMax @  18.6.2014,  11:32 Найти цитируемый пост)
Как то так...

Ох не так  smile 
Особенно порадовала конструкция -
Код

    return *c;
    delete c;
  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)