Как передать массив функции в C++?

Как передать массив функции в C++ Программирование и разработка

Массивы — это полезные типы данных для структур данных в программировании на C ++ и не только. Проще говоря, массивы позволяют хранить данные в виде упорядоченного списка. Вы можете использовать массивы, чтобы легко сортировать или вычислять информацию о коллекции данных, используя одно имя массива.

Сегодня мы обсудим, как передавать массивы функциям в C ++. Попутно мы расскажем, почему мы используем массивы C ++, а также как их объявлять и инициализировать. Затем мы передадим их функциям и обсудим важные различия в массивах в C ++. Эта статья включает в себя учебные пособия как для одномерных, так и для двумерных массивов.

Массивы и структуры данных в C++

Массивы являются частью более широкой концепции информатики: структур данных. Мы используем структуры данных для организации и хранения данных, чтобы эффективно выполнять операции с этими данными. Структуры данных состоят из более мелких компонентов, называемых типами данных. Массивы — это тип данных, часто используемый в структурах данных.

Массивы являются частью более широкой концепции информатики

Как показано на диаграмме, C ++ имеет следующие типы данных:

  • Примитивные (или фундаментальные) типы данных
  • Производные типы данных
  • Типы данных, определяемые пользователем

Массивы — это производные типы данных. Производные типы данных состоят из примитивных или встроенных типов данных. Производные типы данных обладают некоторыми возможностями, которых не хватает примитивным типам данных. Например, примитивные типы данных не могут хранить более одного значения за раз, в то время как массивы могут.

Массивы позволяют хранить и получать доступ к нескольким значениям одного и того же типа данных под одним именем. Массивы полезны, когда вы имеете дело с большим объемом данных. Например, учитывая данные о 100 учениках и их оценках, было бы утомительно объявлять 100 переменных для хранения оценок каждого ученика. Вместо этого мы бы использовали массив для хранения всех данных под одним именем.

Читайте также:  Как преобразовать строку в байты Python?

Основные термины, связанные с массивами, — это элементы массива, индекс массива и размер массива.

  • Элемент : относится к значениям, хранящимся в массиве (в соседних ячейках памяти).
  • Индекс : относится к позиции элемента массива, начиная с 0 и постепенно увеличиваясь на единицу для каждого дополнительного элемента.
  • Размер : относится к общему количеству элементов, хранящихся в массиве.

Вот иллюстрация массива из шести элементов. Размер массива равен шести по количеству элементов. Каждый из шести элементов хранится с соответствующими индексами (например, первый элемент массива, 10, хранится с нулевым индексом).

Двумерный массив (или 2-й массив) представляет

Двумерный массив (или 2-й массив) представляет собой массив из массивов. Двумерные массивы представляют собой матрицу. Это наиболее часто используемые многомерные массивы. Мы можем получить доступ к элементам в двумерном массиве, указав их индексы строки и столбца, которые начинаются с нуля и постепенно увеличиваются с каждым добавленным элементом.

Эта матричная иллюстрация представляет собой массив размером девять. Каждый из девяти элементов хранится в соответствующем индексе строки и столбца.

Эта матричная иллюстрация представляет собой массив размером девять

Указатель — это еще один производный тип данных, имеющий отношение к сегодняшнему обсуждению. Подробнее об указателях мы поговорим в конце этой статьи.

Объявление массива в C ++

Как объявить одномерный массив

Общий синтаксис объявления одномерного массива включает в себя указание типа данных, имени массива и размера массива:

Тип данных ArrayName [размер массива];

В этом коде мы объявляем одномерный массив, Roll_Numberкоторый может хранить пять целочисленных значений. Компилятор резервирует место intв памяти для пяти элементов типа данных последовательно.

#include <iostream>
using namespace std;
int main() {
  int Roll_Number[5];
}

Как объявить двумерный массив

Общий синтаксис объявления двумерного массива включает определение типа данных, имени массива, индекса строки и индекса столбца:

Тип данных ArrayName [RowSize] [ColumnSize];

В этом коде мы объявляем двумерный массив, Student[10][5]который может содержать 10 массивов Student[5]. Каждый Student[5]массив может хранить пять целочисленных значений. Компилятор резервирует место для 50 элементов (10 * 5) типа intданных последовательно в памяти.

#include <iostream>
using namespace std;
int main() {
  int Student[10][5];
}

Инициализация массива в C ++

Как инициализировать одномерный массив

Общий синтаксис для инициализации одномерного массива:

ArrayName [ArrayIndex] = значение;

В этом коде мы инициализируем массив с именем, Roll_Numberкоторый хранит: 100 по индексу 0, 101 по индексу 1, 102 по индексу 2и так далее.

#include <iostream>
using namespace std;
int main() {
  int Roll_Number[5];
  Roll_Number[0] = 100;
  Roll_Number[1] = 101;
  Roll_Number[2] = 102;
  Roll_Number[3] = 103;
  Roll_Number[4] = 104;
}

Как инициализировать двумерный массив

Общий синтаксис для инициализации двумерного массива:

ArrayName [RowIndex] [ColumnIndex] = значение;

Этот код инициализирует двумерный массив, в котором хранятся: 100 в индексе строки и индексе 0столбца 0, 134 в индексе строки и индексе 0столбца 1и т. Д.

#include <iostream>
using namespace std;
int main() {
  int Student[2][2];
  Student[0][0] = 100;
  Student[0][1] = 134;
  Student[1][0] = 34;
  Student[1][1] = 189;
}

Объявление и инициализация массивов за один шаг

Как объявлять и инициализировать одномерные массивы

Общий синтаксис для инициализации и объявления одномерного массива:

DataType ArrayName [] = {значение1, значение 2,…, значениеN}

В этом примере мы инициализируем Roll_Numberмассив на этапе объявления.

#include <iostream>
using namespace std;
int main() {
  int Roll_Number[ ] = { 100, 101, 102, 103, 104 };
}

Как объявлять и инициализировать двумерные массивы

Общий синтаксис для инициализации и объявления двумерного массива:

DataType ArrayName [] [] = {{значение1,…, значениеN},… {значение1,…, значениеN}}

В этом примере мы инициализируем Student[][3]массив на этапе объявления. Указание первого измерения необязательно при инициализации двумерных массивов. Компилятор определит количество строк из вашего оператора. Вот почему код в этом примере написан с использованием Student[][3]вместо Student[3][3].

#include <iostream>
using namespace std;
int main() {
  int Student[][3] = {{100, 134, 234}, {34, 189, 221}, {109, 139, 56}};
}

Передача массивов функциям в C ++

Теперь, когда мы рассмотрели основы, давайте приступим к передаче массивов функциям C ++. Мы можем использовать имена массивов в качестве параметров во время объявления функции.

Чтобы передать массивы в функцию, мы указываем тип массива, за которым следует имя массива и квадратные скобки в параметрах функции. В квадратных скобках сказать компилятору, что первый параметр функции является массивом, в противном случае, переменный будет предполагаться.

Передача одномерных массивов в функции

Общий синтаксис передачи массива функции в C ++:

FunctionName (ArrayName);

В этом примере наша программа будет перемещаться по элементам массива. Мы изменим значение любого элемента меньше 50 на значение −1.

#include <iostream>
using namespace std;
// print_array function will print the values of an array
void print_array(int number[], int size) {
  for (int i = 0; i < size; i++) {
    cout << number[i] << » «;
  }
  cout << endl;
}
// modify_array function
void modify_array(int number[], int size) {
  // Traverse array
  for (int i = 0; i < size; i++) {
    // If value less tha 50 set it to -1
    if (number[i] < 50)
      number[i] = -1;
  }
  cout << «Values of array inside the function:» << endl;
  // Call print_array function
  print_array(number,size);
}
// main function
int main() {
  // Initialize size of an array
  int size = 8;
  // Initialize values of array
  int number[size] = {67, 89, 56, 43, 29, 15, 90, 67};
  cout << «Values of array before function call:» << endl;
  // Call print_array function
  print_array(number,size);
  // Call modify_array function
  modify_array(number, size);
  cout << «Values of array after function call:» << endl;
  // Call print_array function
  print_array(number,size);
}

Передача двумерных массивов в функции

В этом примере мы передадим двумерный массив int n[][2]функции, которую мы определяем как, display()и распечатаем элементы массива. Для вызова функции мы передаем только имя массива в качестве аргумента функции display(num).

#include <iostream>
using namespace std;
// define function
// pass 2-d array as a parameter
void display(int n[][2]) {
    cout << «Displaying Values: » << endl;
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 2; ++j) {
            cout << «num[» << i << «][» << j << «]: » << n[i][j] << endl;
        }
    }
}
int main() {
    // initialize 2-d array
    int num[3][2] = {
        {3, 4},
        {9, 5},
        {7, 1}
    };
    // call function
    // pass 2-d array as argument
    display(num);
    return 0;
}

Массивы: указатели и передача по ссылке

Вы могли заметить, что мы не указали размер массива при передаче их функциям. Причина этого связана с тем, что по умолчанию массивы передаются по ссылке на аргументы. Это отличается от случая с переменными, которые передаются по значению. Когда мы используем имя массива в качестве параметра функции, мы фактически передаем исходный массив функции. Давайте подробно остановимся на том, что это значит.

Массивы передаются по ссылке из практических соображений. Например, представьте, что у нас есть большой массив размером 10 000. Было бы утомительно передать весь массив и его 10 000 элементов. Фактически, мы не можем передать весь массив функции в C ++. Под капотом мы все время передаем указатель, который содержит адрес памяти на первый элемент массива.

Ранее мы упоминали указатели как еще один производный тип данных. Указатели содержат адреса памяти других типов данных. Когда мы используем тип указателя в качестве параметра функции вместо значения данных, мы даем функции адрес памяти непосредственно для определенного фрагмента данных. Для объектов, которые передаются в функцию по ссылке, любое изменение формального параметра функции влияет на фактический параметр в вызывающей среде. Это потому, что формальный параметр получает ссылку (или указатель) на фактические данные.

В C ++ вы технически получаете указатель с каждым объявлением массива. Массивы и указатели не эквивалентны, но их арифметика определяется таким образом, что указатель может служить для доступа к массиву или имитации массива. Имя массива действует как указатель на адрес памяти первого элемента массива. Когда массив появляется в выражении, компилятор генерирует указатель на адрес первого элемента массива.

Заключение

Теперь вы знаете основы использования массивов в C ++. Массивы — это типы данных, которые мы можем использовать для хранения коллекции данных под одним именем. Мы рассмотрели, почему и как мы работаем с одномерными и двумерными массивами. Мы также обсудили роль указателей при передаче массивов функциям.

Оцените статью
bestprogrammer.ru
Добавить комментарий