using arrays with functions c
Все, що вам потрібно знати про масиви з функціями на C ++:
У цьому підручнику ми обговоримо, як можна використовувати масиви з функціями в C ++. Як правило, масиви можуть передаватися функціям як аргументи так само, як ми передаємо змінні функціям.
Але оцінка формальних параметрів дещо інша, коли справа стосується масивів. Перш ніж досліджувати передачу масивів функціям, нам потрібно коротко обговорити поняття вказівника на масив.
=> Ознайомтесь із поглибленими навчальними посібниками для C ++ тут.
Що ви дізнаєтесь:
- Вказівник на масив
- Передача масивів у функцію
- Повернення масивів із функцій
- Висновок
- Рекомендована література
Вказівник на масив
Розглянемо наступний масив, що містить перші п’ять чисел послідовності Фібоначчі.
int fibSeq(5) = {1,1,2,3,5};
Давайте оголосимо покажчик fibPtr, щоб вказати цей масив.
int* fibPtr; fibPtr = fibSeq;
Коли ми друкуємо вміст fibPtr, висновок буде першим елементом масиву fibSeq. Це пов’язано з тим, що ім’я масиву без квадратних дужок обчислюється покажчиком на перший елемент масиву. Таким чином, у наведеному вище прикладі назва “fibSeq” вказує на перший елемент масиву “fibSeq”.
Нижче зображено те саме:
Як показано у вищенаведеному зображальному зображенні, fibPtr вказує на перший елемент масиву. Таким чином, використовуючи арифметику покажчика, ми можемо надрукувати всі елементи масиву, просто використовуючи fibPtr.
Наприклад, вираз * (fibPtr + 1) вказуватиме на другий елемент масиву тощо.
Як налаштувати мережевий брандмауер -
Давайте помістимо це в програму і перевіримо результати 'fibSeq' та 'fibPtr':
#include #include using namespace std; int main() { int fibSeq(5) = {1,1,2,3,5}; int* fibPtr; fibPtr = fibSeq; cout<<'
fibSeq points to :'<<*fibSeq; cout<<'
fibSeq(0): '<<*fibPtr; cout<<'
fibSeq(1): '<<*(fibPtr + 1); cout<<'
fibSeq(2): '<<*(fibPtr + 2); cout<<'
fibSeq(3): '<<*(fibPtr + 3); cout<<'
fibSeq(4): '<<*(fibPtr + 4); } }
Вихід:
fibSeq вказує на: 1
fibSeq (0): 1
fibSeq (1): 1
fibSeq (2): 2
fibSeq (3): 3
fibSeq (4): 5
У наведеному вище прикладі ми оголошуємо змінну покажчика fibPtr, а потім змушуємо її вказувати масив, присвоюючи ім'я масиву fibPtr. Коли ми робимо це, ми робимо fibPtr вказівкою на перший елемент масиву. Потім ми друкуємо всі значення масиву за допомогою fibPtr.
Передача масивів у функцію
Коли ми маємо справу з функціями, ми передаємо їй масиви аналогічним чином, як і функції передачі змінних. Але ми не передаємо змінну масиву типу ().
Натомість ми передаємо вказівник на масив, тобто ім’я масиву, який вказує на перший елемент масиву. Тоді формальний параметр, який приймає цей вказівник, насправді є змінною масиву. Коли ми передаємо вказівник, ми можемо безпосередньо змінювати масив усередині функції.
Розглянемо наступну програму, яка обчислює квадрат кожного елемента перших п’яти елементів у послідовності Фібоначчі, щоб продемонструвати передачу масиву функціонуванню.
#include #include using namespace std; void fibSeqSquare(int fibSeq()) { for(int i=0;i<5;i++) { fibSeq(i) *= fibSeq(i); } } int main() { int fibSeq(5) = {1,1,2,3,5}; fibSeqSquare(fibSeq); for(int i=0;i<5;i++) { cout<У наведеному вище прикладі ми обчислюємо квадрат кожного елемента в послідовності Фібоначчі. Цей квадрат обчислюється всередині функції. Отже, ми передаємо ім'я масиву функції 'fibSeqSquare' під час виклику функції з main. Усередині функції ми обчислюємо квадрати кожного елемента.
Оскільки ми передали посилання на масив за допомогою вказівника, будь-які зміни, які ми робимо в масиві всередині функції, відображатимуть масив. Отже, коли ми друкуємо масив у головній функції, ми отримуємо квадрати кожного елемента як вихідні дані.
У наведеному вище прикладі ми бачили, що аргумент масиву (формальний параметр) функції fibSeqSquare не вказує розмір масиву, а лише квадратні дужки (()), щоб вказати, що це масив. Це один із способів задання аргументів масиву.
Інший спосіб вказати аргумент масиву у формальному списку параметрів - це вказати розмір масиву всередині квадратних дужок. Обидва аргументи працюють однаково. Це просто два способи, якими ми вказуємо аргументи масиву.
У наступному прикладі показано аргумент Array, вказаний із розміром.
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<У наведеному вище прикладі є функція відображення послідовності Фібоначчі. Функція має параметр як масив, де ми також вказали розмір масиву.
Ми також можемо передавати функціям багатовимірні масиви так само, як показано вище.
як написати хороший тест
Повернення масивів із функцій
Що стосується повернення масиву з функції, то C ++ не дозволяє повернути цілий масив із функції. Однак ми можемо створити функцію для повернення покажчика на масив. Але в цьому є підвох.
Розглянемо наступний фрагмент коду:
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< Хоча вищевказана програма просто повертає покажчик на перший елемент масиву з функції, вона не працює належним чином. Ми не можемо гарантувати, що програма дасть нам правильний результат. Це може дати або не дати правильний результат.
Це пов’язано з тим, що ми повертаємо локальну змінну з функції, і ми не впевнені, чи буде вона в зоні дії до моменту її повернення чи ні.
Таким чином, в двох словах, C ++ не віддає перевагу поверненню масивів із функцій.
Якщо взагалі нам потрібно повернути масиви з функції, нам потрібно використовувати будь-який з наступних методів:
# 1) Повернення динамічно розподілених масивів
Ми можемо повернути покажчик масиву з динамічно виділеного масиву. Ми використовуємо оператор ‘new’ для динамічного розподілу масиву. Оскільки це динамічний масив, він буде в межах сфери дії, якщо ми не «видалимо» масив. Отже, програма буде працювати нормально, коли ми повернемо масив.
wifi шлюз за замовчуванням недоступний
Це показано в наступному прикладі.
#include #include using namespace std; int* funcArray() { int* arr = new int(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Вихід:
1 2 3
# 2) Повернення статичних масивів
Оскільки статичні змінні / масиви мають обсяг у всій програмі, ми також можемо повертати статичні масиви з функцій. Ми можемо взяти приклад, щоб продемонструвати це. Це те саме, що і в попередньому прикладі з тією лише різницею, що в цьому прикладі ми використовували статичний масив замість динамічно виділеного масиву.
#include #include using namespace std; int* funcArray() { static int arr(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Вихід:
1 2 3
Примітка : Ми також можемо використовувати структуру, щоб обернути масив всередині нього, а потім повернути цю структуру. Таким чином, ми природно повернемо масив із функції. Але це не дуже здійсненний метод повернення масивів.
Висновок
Таким чином, у цьому підручнику ми детально обговорили масиви щодо функцій. Ми сподіваємось, що цей посібник допоміг би прояснити всі сумніви та помилки щодо масивів та функцій C ++.
=> Ознайомтесь з Ідеальним навчальним посібником для C ++ тут.
Рекомендована література