Restituisce il puntatore alla matrice in C++

Jinku Hu 12 ottobre 2023
  1. Usa la notazione int var[n] per passare l’argomento array alla funzione e poi restituisci in C++
  2. Usa la notazione int* var per passare l’argomento array alla funzione e poi restituisci in C++
Restituisce il puntatore alla matrice in C++

Questo articolo spiegherà diversi metodi per restituire un puntatore a un array in una funzione in C++.

Usa la notazione int var[n] per passare l’argomento array alla funzione e poi restituisci in C++

Poiché la funzione deve restituire il valore del puntatore, assumeremo che l’array sia di lunghezza fissa. In alternativa, se dobbiamo passare un array dinamico - std::vector a una funzione, è meglio usare i riferimenti.

Il prossimo esempio mostra la funzione subtructArray che sottrae ogni valore nell’array dato il valore subtrahend. L’array è dichiarato come array in stile C grezzo, che è principalmente utile per operare con i puntatori. L’array viene passato con la notazione int arr[] del parametro, ma viene convertito sotto dal compilatore come puntatore all’array e possiamo trattarlo come tale nel corpo della funzione. Infine, restituisce il valore del puntatore utilizzando direttamente il nome della variabile senza prendere il suo indirizzo con l’operatore &.

Gli elementi dell’array sottratti vengono inviati alla console, e dopo aver emesso l’ultimo elemento, c’è l’istruzione cout che include \b\b nella stringa letterale. Questa sequenza di escape indica che il comportamento del tasto backspace viene emulato, eliminando così gli ultimi due caratteri nell’output della console.

#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;
}

Produzione:

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

Usa la notazione int* var per passare l’argomento array alla funzione e poi restituisci in C++

Un altro metodo per passare un array di dimensioni fisse è dichiarare un parametro di funzione con la notazione int* var e restituire il valore del puntatore dopo che il corpo della funzione ha finito di elaborarlo. Si noti che il codice di esempio successivo utilizza il contenitore std::array e chiama il metodo data() per recuperare il puntatore in cui sono memorizzati gli elementi dell’array. L’istruzione return prende il nome della variabile come nel metodo precedente.

#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;
}

Produzione:

array1 = [ -14, -13, -12, -11, -10, -9, -8, -7, -6, -5 ]
Autore: 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

Articolo correlato - C++ Array