C ++ дает массивы функциям и возвращает их

0

Я должен сделать функцию, которая копирует массив и возвращает его.

const int HEIGHT = 21;
const int WIDTH = 16;
char field [HEIGHT][WIDTH] = {
    "###############",
    "#             #", 
    "# ## ### #### #",
    "# ## ### #### #",
    "#             #",
    "# ########  # #",
    "# #         # #",
    "# #  #####  # #",
    "# #  #####  # #",
    "# #         # #",
    "# #         # #",
    "#             #",
    "# ## ######## #",
    "# ## ######## #",
    "# ## ######## #",
    "#             #",
    "# ###     ### #",
    "# ########### #",
    "# ########### #",
    "#             #",
    "###############",
};

char copyArray(char copyField[][1]) { //Copy the array field to newField and return it to main

    int i = 0;
    int j = 0;

    for (int i = 0; i < HEIGHT; i++) {
        copyField[i][j] = field[i][j];

        for (int j = 0; j < WIDTH; j++)
            copyField[i][j] = field[i][j];
    }
    /* for (int i = 0; i < HEIGHT; i++) {
        cout << copyField[i] << endl;
    } */
    return copyField[i][j];
}

int main() {
    //char newField[HEIGHT][WIDTH] = copyArray();
    //cout << newField[1][1] << endl;
    int i = 0;
    int j = 0;
    char copyField[HEIGHT][WIDTH]= copyArray(*copyField[][1]);
    return 0;
}

Мои проблемы: как я могу дать copyArray от основной функции функции copyArray и как мне ее вернуть? теперь часть копии работает нормально, я протестировал ее, объявив char copyArray [HEIGHT] [WIDTH] в функции copyArray, напечатав ее там. Я знаю, что векторы и memcpy работают лучше и легче, но я должен использовать это.

  • 1
    Невозможно передать массив по значению функции. Также невозможно вернуть массив по значению из функции. Конечно, можно передать указатель на массив функции и заставить эту функцию изменить этот массив, но это не является строгим возвратом массива из функции. Вы должны быть очень осторожны в использовании терминологии с такими вопросами.
Теги:
arrays
function

1 ответ

0

В этом примере показано, как передавать массивы в функции и возвращать их.

#include <stdio.h>
#include <math.h>

double* func(int i, double * mas)
{
  double* mas_new = new double[i];
  for(int z=0; z<i; z++)
        mas_new[z] = sqrt(mas[z]);
  return mas_new;
}

int main()
{
  double mas[] = {1.0, 2.0, 3.0, 4.0};
  double* mas_new;

  for(int z=0; z<4; z++)
        printf("%f ", mas[z]);

  mas_new = func(4, mas);

  for(int z=0; z<4; z++)
        printf("%f ", mas_new[z]);

  delete mas_new;
  return 0;
}

Существует два способа заставить массив функционировать.

void foo (int* arr) {
....
}

или

void foo (int arr[]) {
.....    
}

Как и второй параметр, рекомендуется передать размер массива.

Чтобы вернуть массив из функции, вы должны вернуть указатель на свой первый элемент.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню