Dev - C++ - Cómo se devuelve un puntero de arrays en una salida de una función?

 
Vista:
sin imagen de perfil

Cómo se devuelve un puntero de arrays en una salida de una función?

Publicado por MIKE (1 intervención) el 04/10/2021 21:37:40
Si tengo una cosa de ese estilo:
1
double C[3][3]={1,2,3,4,5,6,7,8,9};
Cómo se define la función para que puedo usar C como la salida, es decir, para que return C no me da error?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Cómo se devuelve un puntero de arrays en una salida de una función?

Publicado por anonymous (146 intervenciones) el 04/10/2021 22:51:02
Hola, hay tres formas para hacer eso.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
using namespace std;
 
double global[3][3] = {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}, {7.0, 8.0, 9.0}};
 
//1era forma: Usando un argumento
double* primera(double arg[3][3])
{
  return (double*)arg;
}
 
//2da forma: Usando una variable global o estática
double* segunda(void)
{
  return (double*)global;
}
 
//3ra forma: Usando memoria dinámica
double** tercera(void)
{
  double** var = new double* [3];
 
  var[0] = new double[3];
  var[1] = new double[3];
  var[2] = new double[3];
 
  var[0][0] = 1.0; var[0][1] = 2.0; var[0][2] = 3.0;
  var[1][0] = 4.0; var[1][1] = 5.0; var[1][2] = 6.0;
  var[2][0] = 7.0; var[2][1] = 8.0; var[2][2] = 9.0;
 
  return var;
}
 
int main()
{
  double local[3][3] = {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}, {7.0, 8.0, 9.0}};
 
  double* p1 = primera(local);
  double* p2 = segunda();
  double** p3 = tercera();
 
  int j, i; //columnas y filas
 
  //Impriendo por la primera forma
  for(j = 0; j < 3; ++j)
  {
    for(i = 0; i < 3; ++i)
      cout << ((double*)&p1[j])[i] << ' ';
 
    cout << endl;
  }
 
  //Impriendo por la segunda forma
  for(j = 0; j < 3; ++j)
  {
    for(i = 0; i < 3; ++i)
      cout << ((double*)&p2[j])[i] << ' ';
 
    cout << endl;
  }
 
  //Impriendo por la tercera forma
  for(j = 0; j < 3; ++j)
  {
    for(i = 0; i < 3; ++i)
      cout << p3[j][i] << ' ';
 
    cout << endl;
  }
 
  delete[] p3[2];
  delete[] p3[1];
  delete[] p3[0];
 
  delete[] p3;
 
  return 0;
}

Bueno esas serían las tres formas de que una función regrese un arreglo (si no te sirve ninguna, aún hay una cuarta forma pero es más complicada), espero te ayude, cualquier cosa avísame, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar