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]);
}
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.
è 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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.