|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
|
[c++] in una funzione è possibile passare in output un array?????
è 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]); }
__________________
..strisc...strisc...oooooOOoooO http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
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 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2001
Città: Roma
Messaggi: 2141
|
quindi al posto di
double [] = somma_differenza(double m, double n) che devo scrivere? double[] non me lo accetta, essendo un array.
__________________
..strisc...strisc...oooooOOoooO http://digilander.iol.it/pentiumII Navi da battaglia giapponesi classe Yamato WWII |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 937
|
Quote:
Francamente, visto che stai usando C++, ti suggerirei l'utilizzo di STL, quindi: Codice:
#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;
}
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.
__________________
MacMini Late 2009/MacMini 2018 Ultima modifica di mr_hyde : 21-03-2006 alle 01:05. Motivo: Uno dei tanti errori di battitura e accorciamento... |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:04.


















