PDA

View Full Version : [c++] in una funzione è possibile passare in output un array?????


vermaccio
20-03-2006, 12:32
è possibile passare in output un array?????
una funzione così insomma non risco a crearla:

#include<stdio.h>
#include <math.h>

double a, b;
double arraydirisultati[2]; //array di 2 elementi


double [] = somma_differenza(double m, double n){
//scritto così NON funziona!!!!!! non accetta "double []"
double s, t; //variabili locali
double arraylocale[2]; //array locale
s=m+n;
t=m-n;
arraylocale[0]=s;
arraylocale[1]=t;
return (arraylocale[]);

}



void main()
{

arraydirisultati=somma_differenza(a, b);
printf("somma tra 2 e 3: %g\n",arraydirisultati[0] );
printf("differenza tra 2 e 3: %g\n", arraydirisultati[1]);
}

VICIUS
20-03-2006, 18:39
certo che puoi ritornare un array ma devi usare la memoria dinamica e i puntatori. Non puoi ritornare una variabile locale perché quelle variabili sono de-allocate ogni volta che esci dalla funzione.

ciao ;)

vermaccio
20-03-2006, 22:01
quindi al posto di

double [] = somma_differenza(double m, double n)

che devo scrivere?

double[] non me lo accetta, essendo un array.

mr_hyde
20-03-2006, 23:40
è possibile passare in output un array?????
una funzione così insomma non risco a crearla:
[...]



Francamente, visto che stai usando C++, ti suggerirei l'utilizzo di STL, quindi:


#include <iostream>
#include <vector>

typedef std::vector<double> dvectorType;

dvectorType somma_differenza(double m, double n)
{
dvectorType tmp;

tmp.push_back(m+n);
tmp.push_back(m-n);

return tmp;
}

int main()
{
double a = 5.0;
double b = 8.0;

dvectorType arraydirisultati=somma_differenza(a, b);

std::cout << "Somma tra " << a << " e " << b << " :" << arraydirisultati[0] << std::endl;
std::cout << "Differenza tra " << a << " e " << b << " :" << arraydirisultati[1] << std::endl;

return 0;
}


Alcune note:
1) gli include: nelle versioni moderne di C++ gli include "base" non usano piu' il ".h"
2) in C++ e' consigliabile usare gli stream std::cout, std::cerr std::cin per l'output su standard putput, error e input da standard input
3) se usi uno std::vector hai gia' a disposizione costruttore di copia e metodi vari che altrimenti dovresti implementarti tu in una classe "array"
4) nel caso il tuo vettore di uscita potesse avere un numero variabile di elementi con
- un iteratore
- o con il metodo size() e l'operatore []
puoi comunque "navigare" tra gli elementi del vettore, senza conoscerne a priori il numero massimo
5) non devi essere tu a preoccuparti di allocazioni e deallocazioni


Se invece di usare STL vuoi propri allocare e deallocare, per gli array NON usare malloc e free, ma gli operatori del C++ new[] e delete[]
Per la new: ricordati di metterla tra try/catch e di controllare l'eccezione std::bad_alloc (molti ancora credono che in caso di fallimento venga restituito 0 (NULL), ma nello standard piu' recente di C++ NON E' PIU' COSI'.

Ciao,
Mr Hyde

P.S.: io personalmente continuo a consigliarti l'uso di STL.