Regresar el puntero a la array en C++

Jinku Hu 12 octubre 2023
  1. Usar la notación int var[n] para pasar el argumento de la array a la función y luego devolverlo en C++
  2. Usa la notación int* var para pasar el argumento de la array a la función y luego regresa en C++
Regresar el puntero a la array en C++

Este artículo explicará varios métodos para devolver un puntero a una array en una función en C++.

Usar la notación int var[n] para pasar el argumento de la array a la función y luego devolverlo en C++

Como la función necesita devolver el valor del puntero, asumiremos que la array es de longitud fija. Alternativamente, si tenemos que pasar un array dinámico - std::vector a una función, es mejor usar referencias.

El siguiente ejemplo demuestra la función subtructArray que resta cada valor del array dado el valor de la resta. La array se declara como una array en bruto de estilo C, lo que es muy útil para operar con punteros. La array se pasa con la notación int arr[] del parámetro, pero el compilador la convierte debajo como el puntero de la array y podemos tratarla como tal en el cuerpo de la función. Finalmente, devuelve el valor del puntero directamente usando el nombre de la variable sin tomar su dirección con el operador &.

Los elementos del array sustraídos se envían a la consola, y después de enviar el último elemento, hay una declaración cout que incluye \b\b en el literal de la cadena. Esta secuencia de escape significa que el comportamiento de la tecla de retroceso es emulada, eliminando así los dos últimos caracteres de la salida de la consola.

#include <array>
#include <iostream>

using std::array;
using std::cin;
using std::cout;
using std::endl;
using std::string;

int *subtructArray(int arr[], int size, int subtrahend) {
  for (int i = 0; i < size; ++i) {
    arr[i] -= subtrahend;
  }
  return arr;
}

constexpr int SIZE = 10;

int main() {
  int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  int num = 15;

  int *ptr = subtructArray(c_array, SIZE, num);

  cout << "array1 = [ ";
  for (int i = 0; i < SIZE; ++i) {
    cout << ptr[i] << ", ";
  }
  cout << "\b\b ]" << endl;

  return EXIT_SUCCESS;
}

Producción :

array1 = [ -14, -13, -12, -11, -10, -9, -8, -7, -6, -5 ]

Usa la notación int* var para pasar el argumento de la array a la función y luego regresa en C++

Otro método para pasar el conjunto de tamaño fijo es declarar un parámetro de la función con la notación int* var y devolver el valor del puntero después de que el cuerpo de la función haya terminado de procesarlo. Observe que el siguiente código de muestra utiliza el contenedor std::array y llama al método data() para recuperar el puntero donde se almacenan los elementos del array. La sentencia return toma el nombre de la variable como en el método anterior.

#include <array>
#include <iostream>

using std::array;
using std::cin;
using std::cout;
using std::endl;
using std::string;

int *subtructArray(int *arr, int size, int subtrahend) {
  for (int i = 0; i < size; ++i) {
    arr[i] -= subtrahend;
  }
  return arr;
}

constexpr int SIZE = 10;

int main() {
  array<int, SIZE> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  int num = 15;

  int *ptr2 = subtructArray(arr1.data(), arr1.size(), num);

  cout << "array2 = [ ";
  for (int i = 0; i < SIZE; ++i) {
    cout << ptr2[i] << ", ";
  }
  cout << "\b\b ]" << endl;

  return EXIT_SUCCESS;
}

Producción :

array1 = [ -14, -13, -12, -11, -10, -9, -8, -7, -6, -5 ]
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Array